C++ 对用户输入的字符串中的单词进行计数

C++ 对用户输入的字符串中的单词进行计数,c++,string,manipulators,C++,String,Manipulators,所以我正在为家庭作业的最后一章准备复习题 我的问题是,如果用户输入一个字符串句子,我将如何计算字数?我不认为它在课堂上被涵盖,也不会在课堂上被涵盖 我已经开始请求句子并使用getline读取字符串,但是除了将输入写入文件、打开同一个文件并以这种方式计算单词之外,我如何计算单个单词呢 不是完整答案,因为这是家庭作业,但请检查中的函数。基本上,您希望找到字符串中的下一个非空白字符,然后是下一个空白字符,递增计数器,重复操作,直到到达字符串末尾。不是完整答案,因为这是家庭作业,但请检查中的函数。基本上

所以我正在为家庭作业的最后一章准备复习题

我的问题是,如果用户输入一个字符串句子,我将如何计算字数?我不认为它在课堂上被涵盖,也不会在课堂上被涵盖


我已经开始请求句子并使用getline读取字符串,但是除了将输入写入文件、打开同一个文件并以这种方式计算单词之外,我如何计算单个单词呢

不是完整答案,因为这是家庭作业,但请检查
中的函数。基本上,您希望找到字符串中的下一个非空白字符,然后是下一个空白字符,递增计数器,重复操作,直到到达字符串末尾。

不是完整答案,因为这是家庭作业,但请检查
中的函数。基本上,您希望在字符串中找到下一个非空白字符,然后是下一个空白字符,递增计数器,重复操作,直到到达字符串的末尾。

您可以使用
std::istringstream
结合
std::istream\u迭代器
将字符串转换为空白分隔标记的范围,喜欢

要计算范围内的元素,只需使用
std::distance


我想我不会提供实际的代码,因为这是我的家庭作业,但请继续提问。

您可以使用
std::istringstream
结合
std::istream\u迭代器
将字符串转换为空格分隔的标记范围,如

要计算范围内的元素,只需使用
std::distance


我想我不会提供实际的代码,因为这是家庭作业,但请随意提问。

假设
str
是一个
char*
,它是输入句子:

int count = 0;
for(int i = 0; i < strlen(str); i++){
    while(i < strlen(str) && str[i] != ' ')
        i++;
    count++;
}
int count=0;
对于(int i=0;i

这就是您可以在不使用任何特殊的class
string方法的情况下手动进行计数的方法。h

假设
str
是一个
char*
输入语句:

int count = 0;
for(int i = 0; i < strlen(str); i++){
    while(i < strlen(str) && str[i] != ' ')
        i++;
    count++;
}
int count=0;
对于(int i=0;i

这就是不使用任何特殊的class
string方法手动计数的方法。h

在字符串中找到空格和换行符后立即拾取单词。在字符串中找到空格和换行符后立即拾取单词。请注意,在调用
std::distance
之前,实际解析不会发生。这可能有点高级,但将所有代码打包到几个库调用中有点酷。也许同时用手进行分析是一种很好的做法,只是为了跟踪正在发生的事情。请注意,在调用
std::distance
之前,实际的分析不会发生。这可能有点高级,但将所有代码打包到几个库调用中有点酷。也许同时用手来记录正在发生的事情是一种很好的做法。不过也有一些缺点:它只将
'
视为分隔符,而这只是一种特定的空白;它计算空格字符的数量,与单词的数量非常不同。此外,它比C++更像C代码,所以你最好还是用C来结束,比如:<代码> int计数=1,i=0;而(str[i])count+=(str[i++]=''
任何包含
strlen
的循环在其状态下都是非常可疑的。但也有一些缺点:它只将
'
视为分隔符,而这只是一种特定的空白;它计算空格字符的数量,与单词的数量非常不同。此外,它比C++更像C代码,所以你最好还是用C来结束,比如:<代码> int计数=1,i=0;而(str[i])count+=(str[i++]=''
任何包含
strlen
的循环都是非常可疑的。实际上,
是不推荐使用的。请改用
。@raket1111标准配置为
。如果使用前者,则所有函数都在
std::
名称空间中声明;如果是后者,在全局命名空间中。真的吗?谢谢,我认为它们的存在只是为了与C兼容。那么,请忽略我的评论:)实际上,
是不推荐的。请改用
。@raket1111标准配置为
。如果使用前者,则所有函数都在
std::
名称空间中声明;如果是后者,在全局命名空间中。真的吗?谢谢,我认为它们的存在只是为了与C兼容。那么,请忽略我的评论:)