这是一个很常见的笔试题目。
给出我的解法:
算法思路:
该算法需要一个bool值,用来防止word被重复计算,flag初始值为假。
遍历该字符串,
如果字符为字母或数字(组成单词的一部分),如果flag为假,则结果加1,并将flag变成真。
如果字符串为分隔符,则把flag设为假。
//判断是否为分隔符
bool IsSeperator(char c)
{
switch(c)
{
case ' ':
return true;
break;
case ',':
return true;
break;
case '!':
return true;
break;
case '?':
return true;
break;
case '.':
return true;
break;
case '/"':
return true;
break;
case '/n':
return true;
break;
case '/t':
return true;
break;
default:
return false;
break;
}
}
//判断是否为字母或数字
bool isLetter(char c)
{
if ( (c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122))
return true;
else
return false;
}
int CountWords(const char* source)
{
//input lines of words , and count the number of words
/* the seperator may be ' ' white space
'/t' tab
',' comma
'/n' newline
'?' question
';'
'!' quote
'/"'
*/
const char* p = source;
bool word = false;
int count = 0;
for (; *p != '/0'; ++p)
{
if ( isLetter(*p))
{
if (word == false)
{
count++;
word = true;
}
}
else if (IsSeperator(*p))
{
word = false;
}
}
return count;
}
本文介绍了一个C语言实现的算法,用于计算包含多种标点符号的英文文本中单词的数量。通过遍历字符串,判断字符是否为字母或数字,结合分隔符判断,避免重复计数。

被折叠的 条评论
为什么被折叠?



