对于我的情况,我必须检查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);
答案 0 :(得分:18)
这是因为当字符串相等时,compare实际返回0
。如果字符串不相等,它将返回一个更高或更低的值,if将评估为true,如您所见。
在Java和C#等语言中,使用equals
之类的方法比较非基元是很常见的,但在C ++中,最好只使用==
。
答案 1 :(得分:1)
operator==
应该std::string
可以进行更自然的比较。
if(input == getWordFromDictionary(counter)) { ... }
答案 2 :(得分:0)
您需要明确比较compare
与0
的结果。以下是返回值的含义:
0 =&gt;比较的字符串相等
&lt; 0 =&gt;不匹配的第一个字符的值低于 比较字符串,或所有比较的字符匹配,但比较的字符串是 短。
&gt; 0 =&gt;要么不匹配的第一个字符的值更大 比较字符串,或所有比较的字符匹配,但比较的字符串是 更长的时间。
有关std::string::compare的详细说明,请参阅此处。