【问题标题】:Checking if strings are the same c++检查字符串是否相同c ++
【发布时间】:2013-05-22 16:05:02
【问题描述】:

就我而言,我必须检查 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);

【问题讨论】:

    标签: c++ string compare


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢伙计...当我的问题如此简单时,我感到很迟钝。啊哈哈
    • 我认为值得注意的是,使用== 运算符会比compare() 函数更清晰和正确。
    【解决方案2】:

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

    if(input == getWordFromDictionary(counter)) { ... }
    

    【讨论】:

      【解决方案3】:

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

      0 => 比较的字符串相等

      不匹配的第一个字符的值在 比较的字符串,或所有比较的字符都匹配,但比较的字符串是 更短。

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

      std::string::compare的详细解释请看这里。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-23
        • 2015-04-02
        相关资源
        最近更新 更多