#include<iostream>
#include<vector>
#include<string>
using namespace std;
bool letterCheck(vector<string> arr)
{
int b=0;
int l1=arr[0].length();
int l2=arr[1].length();
for(int i=0;i<l1;i++)
{
for(int j=0;j<l2;j++)
{
if(tolower(arr[1][i])==tolower(arr[0][j]))
b++;
}
}
if(b<arr[1].length())
return false;
else return true;
}
int main()
{
vector <string> v={"parses", "parsecs"};
cout<<letterCheck(v);
return 0;
}
是一个接受两个字符串的数组并检查第二个字符串中的字母是否存在于第一个字符串中的程序。
示例:letterCheck(“恍惚”,“蜜”)➞true
letterCheck(“密友”,“窗帘”)➞真
letterCheck(“分析”,"parsecs")➞false
这个程序工作在上面,给出{"parses","parsecs"}的pairs.It返回真,但是它应该返回false。能告诉我,代码中的问题是什么,我能做什么来消除这个问题???
发布于 2019-12-23 14:29:39
当前的问题是,您试图计数匹配字符,以查看第二个字符串中的所有字符是否在第一个字符串中都匹配。但是,由于第一个字符串中有重复字符,计算就出错了:两个’s’
的存在使b
比您希望的要大。一旦找到一个字符以避免出现问题,您就可以跳出循环。
顺便说一句,将未检查的char
传递给tolower()
可以得到未定义的行为:在大多数平台上,char
都是签名的,但是在tolower()
上有一个先决条件,要求参数为nin-负数或EOF
。
而且,b < arr[1].length()
的结果是一个bool
(尽管它需要倒排):不需要编写一个花哨的条件来将它转换为布尔值。
https://stackoverflow.com/questions/59456549
复制相似问题