计算字符串中的单词数,C ++

时间:2012-10-13 18:02:03

标签: c++ string counting

  

可能重复:
  C++ function to count all the words in a string

所以我有一行用C ++存储在字符串中的单词。即“有一个名叫比利的农民”,

我想知道字符串中的单词数量(即当前有6个单词)。谁能告诉我怎么做?如果这是不可能的,有一种方法可以计算字符串中的空格数(即“”)。让我知道谢谢!

2 个答案:

答案 0 :(得分:9)

当然,这很简单:

std::cout << "number of words: "
          << std::distance(std::istream_iterator<std::string>(
                               std::istringstream(str) >> std::ws),
                           std::istream_iterator<std::string>()) << '\n';

只是为了解释一下:

  1. 在浏览前导空格后,读取std::string会读取一个单词,其中单词是一系列非空白字符。
  2. std::istream_iterator<T>通过读取相应的对象将输入流转换为T个对象序列,直到读取失败。
  3. std::istringstream获取std::string并将其转换为正在读取的流。
  4. std::istream_iterator<T>的构造函数参数为std::istream&,即临时std::istringstream不能直接使用,但需要获取引用。这是std::ws唯一有趣的效果,它也会跳过前导空格。
  5. std::distance()确定序列中有多少元素(最初使用的std::count()确定序列中有多少元素与给定条件匹配,但实际上缺少了条件)。

答案 1 :(得分:8)

计算单词的简单方法是使用&gt;&gt;运算符与std :: string,如下所示:

std::stringstream is("There was a farmer named Billy");
std::string word;

int number_of_words = 0;
while (is >> word)
  number_of_words++;

当从std :: istream中提取std :: string时,&gt;&gt;运算符()将在其默认设置中跳过空格,这意味着它将为您提供由一个或多个空格分隔的每个“单词”。因此,即使单词由多个空格分隔,上面的代码也会给出相同的结果。