我正在研究一种算法,该算法将计算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;
}
}
答案 0 :(得分:2)
逐步执行该代码(在调试器中,在头脑中/在纸上)。
给定输入“abc def”
首先假设in_word
= false
in_word
为false,因此num_words++
,in_word=true
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;
}