6

就我而言,我必须检查 2 个字符串是否相同。我得到的问题是,无论我输入什么,无论我输入什么,我都会得到一个真正的价值。

bool Dictionary::checkIfWordExists(string input){
for(int counter=0;counter<234;counter++){
    if(input.compare(getWordFromDictionary(counter))){
        return true;
    }
}
return false;}

出于测试目的,我使用了这样的 do 循环来输入要测试的内容,并与我加载的 dictionary.txt 文件进行比较。

do{
    cout<<"enter something you sexy beast"<<endl;
    string test;
    cin>>test;
    if(loadedDictionary.checkIfWordExists(test)){
        cout<<"yes"<<endl;
    }else{
        cout<<"no"<<endl;
    }
}while(true);
4

3 回答 3

22

那是因为0当字符串相等时 compare 实际上会返回。如果字符串不相等,它将返回一个更高或更低的值,并且 if 将评估为 true,如您所见。

在 Java 和 C# 等语言中,使用比较非基元之类的方法很常见equals,但在 C++ 中,最好只使用==.

于 2013-05-22T16:06:24.003 回答
1

应该有一个operator==forstd::string可用于更自然的感觉比较。

if(input == getWordFromDictionary(counter)) { ... }
于 2013-05-22T16:12:25.803 回答
1

您需要明确比较comparewith的结果0。以下是返回值的含义:

0 => 比较的字符串相等

<0 => 比较字符串中第一个不匹配的字符的值较低,或者所有比较字符都匹配但比较字符串较短。

>0 => 比较字符串中第一个不匹配的字符的值更大,或者所有比较字符都匹配但比较字符串更长。

有关std::string::compare的详细说明,请参见此处。

于 2013-05-22T16:13:01.330 回答