奇怪的布尔回归行为

时间:2012-12-13 18:54:42

标签: c++ boolean compare return

我试图使用我创建的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;
    }
}

4 个答案:

答案 0 :(得分:1)

您忘记了return

pattern.erase(0,1);
source.erase(0,1);
return match(pattern,source);
^^^^^^

另外,正如@melpomene指出的那样,pattern[0] == source[0]部分已被破坏,因为此时patternsource(但不是两者)都可以为空。

最后,需要说递归方法在这里效率极低。

答案 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);

否则你会得到未定义的行为。