思路:
从末尾思考,一个单词结束以后一定会接一个非字母(空格、符号等)。所以有一个英文字母的下一个字符为非字母,则代表一个单词的结束。
准备:
能执行c语言的环境
代码:
int countWords(const char* sentence)
{
int count = 0,i = -1;
while(sentence[++i]) // 从0开始,就是从第一个开始
if(sentence[i] <= 'z' && sentence[i] >= 'a') // 本次是字母
if(!(sentence[i + 1] <= 'z' && sentence[i + 1] >= 'a')) // 且下一个不是字母
count++;
return count;
}
PS:
这并不是真正求单词的函数,而是求连续小写字母块的数量,并且还不包含其他特殊情况(比如德语的öäüß字母)。如果真要求单词,可以在计数增加(count++)那里加个单词比对的功能
比如:
int realCountWords(const char* sentence)
{
int count = 0,i = -1,wordLen = 0;
while(sentence[++i]) // 从0开始,就是从第一个开始
if(sentence[i] <= 'z' && sentence[i] >= 'a') // 本次是字母
{
wordLen++;
if(!(sentence[i + 1] <= 'z' && sentence[i + 1] >= 'a')) // 且下一个不是字母
{
count++;
findWord(sentence + i + 1 - wordLen, wordLen);
// 这个函数为findWord(const char* word, int wordLength)
wordLen = 0; // 新单词,长度清零
}
}
return count;
}