2012-12-13 174 views
0

我想比較兩個字符串字符使用我創建的bool match(string,string)字符,我相信它比較正確,當我輸入兩個字符串不相等,它會輸出false!但是當我檢查布爾時,它沒有返回false。 我想不出這種行爲的原因,我希望有人能幫助我。 代碼:奇怪布爾returing行爲

#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; 
    } 
} 

回答

1

您忘記了return

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

此外,由@melpomene指出的那樣,pattern[0] == source[0]部分破裂,因爲patternsource(但不能同時)可以在這一點上是空的。

最後,需要說的是遞歸方法在這裏效率極低。

+0

謝謝你的回答NPE!即使它不是最快的答案,我仍然感謝你的回答! –

+0

除此之外,'pattern [0] == source [0]'部分也被破壞了。此時'pattern'或'source'可以爲空。 – melpomene

+0

@melpomene:好了,謝謝! – NPE

0

你的意思

return match(pattern,source); 

否則,你得到了一個未定義的行爲。

+0

多麼愚蠢的錯誤,謝謝你,定了! –

1

你缺少你第二別的statment 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; 
} 
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; 
}