如何计算在C ++中重复单词的次数

时间:2016-09-23 05:41:11

标签: c++ string sorting vector

您好我在使用此代码时遇到了一些问题。

4 个答案:

答案 0 :(得分:4)

计算唯一单词的最佳方法是使用std::unordered_map<std::string, int>,然后在地图中增加值:wordMap[word]++;请注意,如果这是单词的第一次出现,则会创建默认值并且是0,适合任务。

除此之外,当存在std :: sort时,自己实现排序并不好,这对绝大多数情况都很好。

答案 1 :(得分:1)

冒泡排序:

vector<string> strings = split(str);
for (int i = 0; i < strings.size(); i++) {
    for (int j = 0; j < strings.size() - 1; j++) {
        if (strings[j + 1] < strings[j]) {
            string tmp = strings[j];
            strings[j] = strings[j + 1];
            strings[j + 1] = tmp;
        }
   }
}

订购后计算单词:

string prev = strings[0];
int counter = 1;

for (int i = 1; i < strings.size(); i++) {
    if (strings[i] == prev) {
        counter++;
    } else {
        cout << prev << ": " << counter << " ";
        prev = strings[i];
        counter = 1;
    }
}

答案 2 :(得分:0)

您可以使用algorithm中的std :: find:

std::find(strings.begin(), strings.end(), the_word_you_looking_for) != strings.end()

返回 bool(如果存在则为true,否则为false)

您还可以设置一个计数器,然后在遇到的每个true上增加它。

答案 3 :(得分:0)

执行相同操作的一种方法是将所有子字符串保存到向量中,然后在向量上使用std :: count函数并将结果放入映射中。这是示例代码

std::string s = "This is very good text and is really good to read";
        // Putting all substrings into a vector.. Need code to do that, for simplicity I am showing here manually
        vector<string> v1;
        v1.push_back("This");
        v1.push_back("is");
        v1.push_back("very");
        v1.push_back("good");
        v1.push_back("text");
        v1.push_back("and");
        v1.push_back("is");
        v1.push_back("rally");
        v1.push_back("good");
        v1.push_back("to");
        v1.push_back("read");
        // Map to create the result
        map<string, int> mp;
        for (auto v : v1) {
            size_t n = std::count(v1.begin(), v1.end(), v);
            mp[v] = n;
        }

        for (auto mvalue : mp) {
            cout << "String = " << mvalue.first.c_str() << "  Count Is " << mvalue.second << endl;
        }