计算char数组C ++中的单词数

时间:2013-11-06 02:30:46

标签: c++ arrays char

我正在研究一种算法,该算法将计算char数组中的单词数。到目前为止它似乎没有按照它应该的方式工作。当一个角色到达并且它不是空格时,它应该被认为是一个单词的一部分。一旦你到达白色空间,我们就不再是一个字了。例如,“Hello World”是两个单词,因为“hello”和“world”之间的空格。

代码:

for(int l = 0; l < count; l++){
        if(isalpha(letters[l]) && !in_word){
            num_words++;
            in_word = true;     
        }else{
            in_word = false;
        }
    }

示例输入: aaaaa bbb aaa lla bub www

示例输出: 13个字

所需输出:6个字

可能的答案:

for(int l = 0; l < count; l++){
        if(isalpha(letters[l]) && !in_word){
            num_words++;
            in_word = true;     
        }else if(!isalpha(letters[l])){
            in_word = false;
        }
    }

3 个答案:

答案 0 :(得分:2)

逐步执行该代码(在调试器中,在头脑中/在纸上)。

给定输入“abc def”

首先假设in_word = false

  • 第一个字符为'a',in_word为false,因此num_words++in_word=true
  • 下一个字符为'b',in_word为真,所以in_word=false

希望你会看到什么是错的

答案 1 :(得分:1)

简单的方法:修剪字符串,计算空格,添加1

答案 2 :(得分:0)

如果你想好好处理换行符,空格标点等,你可以使用正则表达式。您甚至可以使用utf-8字符串来调整它以正常工作。但是它需要C ++ 11支持。

#include <iostream>
#include <string>
#include <regex>

int main ()
{
  std::string s ("this subject has a submarine as a subsequence");
  std::smatch m;
  std::regex e ("\\b(\w*)\\b")

  int count = 0;
  while (std::regex_search (s,m,e)) {
    ++count;
    s = m.suffix().str();
  }

  std::cout<<"Number of matches = "<<count<<std::endl;

  return 0;
}