2012-02-17 82 views
0

我有一個關於在C++中比較字符串的問題。我的下面的代碼應該檢查一個單詞是否是迴文(前後拼寫相同)。問題是我的if語句(s1 == s2)永遠不會計算爲true。我覺得在記憶中這兩個字符串是不同的,但我沒有任何具體的證據。有什麼建議?謝謝!使用==運算符的C++字符串比較

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    string s1, s2; 
    cin >> s1; 

    for(int i = 0; i <= s1.size(); i++){ 
     s2.push_back(s1[(s1.size() - i)]); 
    } 
    cout << s1 <<endl; 
    cout << s2 <<endl; 


    if(s1 == s2){ 
     cout << "Correct" <<endl; 
    } 
    else { 
     cout << "Incorrect" <<endl; 
    } 
    return 0; 
} 
+0

我最好的建議是顯示兩個字符串的值並檢查自己。如果沒有,請在調試器下運行您的程序。逐行瀏覽每一行,並確定它是否按預期行事。 – 2012-02-17 21:18:05

回答

-4

ofcourse。你正在比較兩個變量的指針。 你應該使用strcmp功能

修復:您需要使用: string::compare

好運

+4

這不是C++'std :: string'的工作方式。 – 2012-02-17 19:56:35

+0

對不起,您應該改用 http://www.cplusplus.com/reference/string/string/compare/ – socksocket 2012-02-17 19:59:16

+0

這不是問題;請參閱其他答案... – 2012-02-17 20:02:50

1

你的問題不是在字符串比較。看看你如何構建反轉字符串。

0

索引超出範圍在你的情況。下面是正確的代碼(i初始化爲1,而不是0):

for(int i = 1; i <= s1.size(); i++){ 
     s2.push_back(s1[(s1.size() - i)]); 
    } 
0

你大概就是這個意思s1.size() - i - 1

3

但是,你應該更好地使用下面的,而不是你的循環:

s2.assign(s1.rbegin(), s2.rend()); 
4

這將出界的字符串

for(int i = 0; i <= s1.size(); i++){ 
    s2.push_back(s1[(s1.size() - i)]); 
} 

的字符串只有在範圍0..size()-1字符。你們都在計算和索引一個位置太遠。

0

因爲i從0開始,您將訪問s1[s1.size()-0],它將返回空字符。請注意,建議您使用s1.size() - i - 1的解決方案是錯誤,因爲您正在迭代到幷包括s1.size(),這意味着您在某些時候將訪問s1[-1]。這比訪問s1[s1.size()]差很多,因爲行爲未定義。從1開始迭代,然後你可以保持代碼的其餘部分不變(但請縮進它!)。

正如其他人所提到的,將s2定義爲std::string s2(s1.rbegin(), s1.rend());更加清晰。