我试图使用我创建的bool match(string,string)
逐个字符地比较两个字符串,我相信当我输入两个彼此不相等的字符串时它会正确比较它输出false!但是当我检查bool时它没有返回false。
我无法想出这种行为的原因,我希望有人可以帮助我。
代码:
#include <iostream>
#include <cassert>
#include <cmath>
#include <fstream>
#include <vector>
using namespace std;
bool match(string pattern, string source)
{
if(pattern.size() == 0&& source.size() == 0)
{
return true;
}
else if(pattern[0] == source[0])
{
pattern.erase(0,1);
source.erase(0,1);
match(pattern,source);
}
else
{
cout << "false" << endl;
return false;
}
}
int main()
{
string test1 = "hballo";
string test2 = "hallo";
bool match_found = match(test1,test2);
if(match_found)
{
cout << "match found!"<< endl;
}
else if(!match_found)
{
cout << "match not found!"<< endl;
}
}
答案 0 :(得分:1)
您忘记了return
pattern.erase(0,1);
source.erase(0,1);
return match(pattern,source);
^^^^^^
另外,正如@melpomene指出的那样,pattern[0] == source[0]
部分已被破坏,因为此时pattern
或source
(但不是两者)都可以为空。
最后,需要说递归方法在这里效率极低。
答案 1 :(得分:1)
你在第二个其他声明中缺少一个return语句:
if(pattern.size() == 0&& source.size() == 0)
{
return true;
}
else if(pattern[0] == source[0]) // no return statement.
{
pattern.erase(0,1);
source.erase(0,1);
return match(pattern,source);
}
else
{
cout << "false" << endl;
return false;
}
答案 2 :(得分:1)
尝试此实施:
bool match(const string& pattern, const string& source)
{
int len = source.size();
if (pattern.size() != len)
{
return false;
}
for (int i=0; i < len; ++i)
{
if (pattern[i] != source[i])
return false;
}
return true;
}
答案 3 :(得分:0)
你的意思是
return match(pattern,source);
否则你会得到未定义的行为。