0

我正在研究一种算法,该算法将计算 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;
        }
    }
4

3 回答 3

2

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

给定输入“abc def”

假设in_word= false 最初

  • 第一个字符是'a',in_word是假的,所以num_words++in_word=true
  • 下一个字符是'b',in_word是真的,所以in_word=false

希望你会看到什么是错的

于 2013-11-06T02:35:46.960 回答
1

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

于 2013-11-06T03:40:44.100 回答
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;
}
于 2013-11-06T04:00:53.950 回答