如何获得字符串中的单词数

How to get the number of words in a string

本文关键字:单词数 字符串 何获得      更新时间:2023-10-16

我下周有一项c++入门课的作业要交,我需要一些关于如何去做的建议。我必须编写一个单词计数程序,它给出用户列表输入中的行数、单词数、字符数、唯一行数和唯一单词数。到目前为止,我得到的是:

如果可能的话,我会在std::istringstream中放入一行,并从那里读取单词并计数。要计算唯一的单词/行,几乎可以肯定最简单的方法是将它们插入std::set,然后在完成后计算集合中的项目数量(这看起来几乎是您已经尝试过的,所以这几乎只是确认该方法是完全可行的)。

如果您需要在没有stringstream的情况下分隔单词,(通常)最简单的方法是找到一个非空格字符,然后将字符复制到字符串中,直到再次遇到空格字符为止。重复,直到到达输入的末尾。

最简单的可能是设置一个计数器(words)和一个标志(in_word),从0和false开始。一次读一个字。根据in_word以及当前字符是否为单词字符,更改状态并可能增加单词数(本质上是计数单词开头)。

这听起来很乱,但是取一行(这行就行;-),看看应该怎么写

我不打算为你写所有的代码,但这里是算法:

<标题> 行

使用getline以换行符作为分隔符循环遍历字符串的行。对于每一行(如果不是空的?),增加行数。

<标题>字

对于每一行,使用getline和空格分隔符循环遍历单词。对于每一行,如果不为空,则增加单词数。

<标题>字符

计算空间

std::string.size()

不包括空格

unsigned int numCharacters;
for (std::string::size_type i = 0; i < str.size(); i++)
    if (str[i] != ' ') numCharacters++;
<标题>独特的线/单词

以与计算行数/单词相同的方式循环,但将每一行添加到std::vectorstd::vector.push_back()—如果它还没有包含该行。