【问题标题】:Counting # of words in a line [duplicate]计算一行中的单词数[重复]
【发布时间】:2013-09-21 05:44:27
【问题描述】:

这就是我想要做的,这几乎不是我正在制作的整个程序的一小部分。这部分是计算我输入的字数。

string s;
getline(cin, s);

for (unsigned int i = 0; i < s.length(); i++)
{
    if (s[i] == ' ' || s[i] == '.')
    {
        numWords++;
    }
}

如果有人输入正确的行,末尾有句点,这显然有效。不过,我想不出如何让它识别行尾字符,以防他们不加句号。

【问题讨论】:

  • 换行符 - \n 字符怎么样?另外,我很确定有标准的输入处理函数(对我来说使用 C++ 或 C# 等已经有一段时间了)来处理换行符。最后 - 句号对于行尾来说是一个糟糕的指示符,例如,如果输入包含两个句子怎么办?
  • 那不算最后一个字。如果我输入“你好”,它会告诉我 0 个单词
  • 不,我想知道输入的总字数。
  • 你的代码有什么问题?看来您可以通过查看输入的空格数来计算单词数。然后最后只在总数中加 1。例如:What is wrong with the code you have? 使用您的代码,我得到 7 + 1 = 8
  • “史密斯博士您好。很高兴认识您。” 8 个字,还是 11 个?

标签: c++


【解决方案1】:

为什么不直接从 1 开始 numWords 计数器,只计算空格?

【讨论】:

  • 因为如果我不输入任何内容,它会说有 1 个字。
  • 在字符串爆炸中看到这个:stackoverflow.com/questions/8448176/… 你可以用它来爆炸单词然后检查数组的大小。
【解决方案2】:

这可能和你所追求的一样吗? Count the number of times each word occurs in a file 或者这已经重复了一个Word count program in C++ duplicate

【讨论】:

    【解决方案3】:

    您可以简单地计算行中“ ”的数量并将其添加到1。就是这样。

    【讨论】:

      【解决方案4】:
        bool previousSpace = false;
        for (unsigned int i = 0; i < s.length(); i++)
        {
          if (isspace(s[i]) || s[i] == '.')
          {
              if (previousSpace == false)
              {
                numWords++;
                previousSpace = true;
              }
          }
          else
          {
            previousSpace = false;
          }
        }
        cout << numWords + (previousSpace ? 0 : 1) << endl;
      

      这考虑了多个连续的空格。这里的关键是使用isspace函数。

      【讨论】:

        猜你喜欢
        • 2017-10-22
        • 2020-01-16
        • 2023-04-11
        • 2022-11-23
        • 1970-01-01
        • 2013-12-06
        • 2011-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多