【问题标题】:How to count number of words in a string?如何计算字符串中的单词数?
【发布时间】:2016-03-31 12:37:49
【问题描述】:

我已经提示用户在我的程序的main函数中输入一个字符串并存储userString,并想显示有多少个单词。

这是我打算从 main 调用的函数:

int countWords(string d) {
    string words = " ";
    for (int e = 0; e < d.length(); e++) {
        if (isspace(d[e])) {
            cout << "The string " << words << "word(s). ";
        }
    }
    return words;
}

我在某处读到该函数实际上应该计算空格的数量(这就是我使用isspace() 的原因),而不是单词本身。

如何计算字符串中的单词数并将其显示在同一个函数中?我很难弄清楚,而且我遇到了错误。

我也不能使用库函数。

预期输出:

  • 字符串“2020”只有一个单词。
  • 字符串“Hello guy”有两个单词。

【问题讨论】:

  • 我建议您在函数顶部添加一个int count = 0;,然后在纸上完成您自己的示例(可能还有更多),同时想象当您遇到每个值时count 会发生什么d[e]。如果您不确定如何在代码中表达这一点,那将是一个更好的问题,但我相信您可以制定一些逻辑/算法来计算一个人如何计算字数,我不知道'在您当前的代码中没有看到任何表达的尝试。提示:您可能会发现自己对从空格到字母和返回的转换感兴趣(即isspace(d[e]) &amp;&amp; !isspace(d[e-1]).
  • 你的函数不做任何计数,只输出空格

标签: c++ string


【解决方案1】:

如果你不想使用 boost,一个简单的 for 循环就可以了。

#include <cctype>

...

for(int i = 0; i < toParse.length(); i++){
    if (isblank(toParse[i])){
        //start new word
    }
    else if (toParse[i] == '.'){
        //start new sentence
    }
    else if (isalphanum(toParse[i])){
        //add to your current word
    }
}

编辑:你可以在看到//start new word.的地方增加一个整数

【讨论】:

    【解决方案2】:

    试试boost::split(),它会将单词放入向量中

    【讨论】:

    • 使用库只是为了获取字数?你不认为这会导致过多的开销吗?
    • 我不允许使用库函数,如果我这样做了,我会扣分。
    • 甚至没有关闭。我已经完成了大部分。我在这个功能上遇到了麻烦。我是怎么暗示我想让你做我的作业的?我需要帮助,这不是这个论坛的目的吗?
    • 是否使用现有的库。它是由你决定。你可能注意到这个函数是从 main() 调用的,听起来像是一些非正式的项目。为了提高效率,如果性能没有问题,我认为使用 lib 不是一个坏主意。只是避免重新发明轮子。我的 2 美分。但是,如果不允许库,我会发布一些代码。
    • @LeandroBattochio,让我们保持积极的态度,只关注 SO 需要什么来帮助回答问题。如果您不愿意提供帮助,请查看其他问题。
    【解决方案3】:

    另外,如果你想在满足某个条件的范围内计算某些东西,你可以在std::count_if 中思考

    例子:

    int countWords(std::string d) 
    {
        int w = std::count_if(d.begin(), d.end(), [](char ch) { return isspace(ch); });
        std::cout << "The string \"" << d << "\" has " << w + 1 << " words." << '\n';
        return w;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 2017-10-26
      • 2023-03-21
      相关资源
      最近更新 更多