c++ - 初学者 C++ - 字符串比较

标签 c++ string string-comparison

我是一名 C# 程序员,最近想深入研究较低级别的东西,所以上周开始学习 C++,但偶然发现了一些我认为相当简单的东西。

我在我的程序中输入以下字符串:

“this is a test this test”并希望 wordStructList 包含 4 个单词的列表,“test”和“this”的出现次数设置为 2。然而,在调试时,字符串比较(我试过.compare 和 ==) 无论比较是否为真,似乎总是增加出现的值。

例如当前名称 = "是" word = "这个"

但出现次数仍然增加。

#include "stdafx.h"

using std::string;
using std::vector;
using std::find;
using std::distance;

struct Word
{
    string name;
    int occurrences;
};

struct find_word : std::unary_function<Word, bool> 
{
    string name;
    find_word(string name):name(name) { }
    bool operator()(Word const& w) const 
    {
        return w.name == name;
    }
};

Word GetWordStruct(string name)
{
    Word word;

    word.name = name;
    word.occurrences = 1;

    return word;
}

int main(int argc, char argv[])
{
string s;
string delimiter = " ";
vector<string> wordStringList;

getline(std::cin, s);

do
{
    wordStringList.push_back(s.substr(0, s.find(delimiter)));
    s.erase(0, s.find(delimiter) + delimiter.length());

    if (s.find(delimiter) == -1)
    {
        wordStringList.push_back(s);
        s = "";
    }

} while (s != "");

vector<Word> wordStructList;

for (int i = 0; i < wordStringList.size(); i++)
{
    Word newWord;

    vector<Word>::iterator it = find_if(wordStructList.begin(), wordStructList.end(), find_word(wordStringList[i]));

    if (it == wordStructList.end())
        wordStructList.push_back(GetWordStruct(wordStringList[i]));
    else
    {
        string word(wordStringList[i]);

        for (vector<Word>::size_type j = 0; j != wordStructList.size(); ++j)
        {
            string currentName = wordStructList[j].name;

            if(currentName.compare(word) == 0);
                wordStructList[j].occurrences++;
        }
    }
}

return 0;
}

我希望这个问题是有道理的。有人对此有所了解吗?我也乐于接受有关如何使代码更明智/可读的任何提示。谢谢

最佳答案

问题出在 if 语句之后的分号:

if(currentName.compare(word) == 0);

分号终止语句,所以下一行

wordStructList[j].occurrences++;

不再是 if 语句的一部分,将始终执行。

关于c++ - 初学者 C++ - 字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22045557/

相关文章:

c++ - Qt 按钮处理建议

c++ - 为什么 std::regex_search 找不到正确的重载?

C++ chrono 2个时钟之间的秒数差异

C++ 将字符串与单词进行比较

javascript - 将字母尽可能移到最右边

c - strcmp 或数组错误?

c++ - 杀死正在运行的线程

objective-c - 比较不同长度的字符串与 compare :options:range: produces wrong result

java - 迭代字符串并使用 .equals 将结果与另一个字符串进行比较 (Java)

c - c 中的管道消息被截断