我下周将为我的intro c ++课程做一个作业,我需要一些如何去做的建议。我必须制作一个单词计数程序,它在用户列表输入中给出行数,单词,字符,唯一行和唯一单词的数量。到目前为止,这就是我所拥有的:
答案 0 :(得分:2)
如果可能的话,我会在std::istringstream
中添加一行,并从那里读取单词来计算它们。要计算唯一的单词/行数,将它们插入std::set
几乎肯定是最简单的,然后在完成时计算集合中的项目数(这看起来就像你已经尝试过的那样,所以这几乎只是确认这种方法是完全可行的。)
如果您需要在没有字符串流的情况下分隔单词,则(通常)最容易找到非空格字符,然后将字符复制到字符串,直到再次遇到空格字符。重复,直到到达输入的末尾。
答案 1 :(得分:0)
最简单的可能是设置一个计数器(words
)和一个标志(in_word
),从0和false
开始。一次读一个角色。取决于in_word
,如果当前字符是单词字符,则更改状态并可能增加单词数(基本上计算单词开头数)。
这听起来很混乱,但是排队(这个会做;-)并看看应该怎么做。
答案 2 :(得分:-1)
我不打算为你编写所有代码,但这里是算法:
使用getline
循环遍历字符串的行,并使用换行符作为分隔符。对于每一行(如果它不是空的?),增加行数。
对于每一行,使用带有空格分隔符的getline
循环显示单词。对于每一行,如果它不为空,则增加单词数。
std::string.size()
unsigned int numCharacters;
for (std::string::size_type i = 0; i < str.size(); i++)
if (str[i] != ' ') numCharacters++;
循环显示与计算行/单词相同的方式,但将每行添加到std::vector
- std::vector.push_back()
- 如果它还不包含该行。