使用==运算符进行C ++字符串比较

时间:2012-02-17 19:53:05

标签: c++ string

我有一个关于在C ++中比较字符串的问题。我的下面的代码应该检查一个单词是否是回文(向前和向后拼写相同的方式)。问题是我的if语句(s1 == s2)永远不会计算为true。我觉得在内存中这两个字符串是不同的,但我没有任何具体的证据。有什么建议?谢谢!

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

7 个答案:

答案 0 :(得分:4)

这超出了字符串的范围

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

字符串只有0..size()-1范围内的字符。你是在计算和索引一个位置太远了。

答案 1 :(得分:3)

但你应该更好地使用以下代替你的循环:

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

答案 2 :(得分:1)

您的问题不在字符串比较中。看看你是如何构建反向字符串的。

答案 3 :(得分:0)

在您的情况下,索引超出范围。这是正确的代码(我用1初始化,而不是0):

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

答案 4 :(得分:0)

你可能意味着s1.size() - i - 1

答案 5 :(得分: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());更加清晰。

答案 6 :(得分:-4)

ofcourse。你正在比较两个变量的指针。 你应该使用strcmp功能

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

祝你好运