這是一個很常見的筆試題目。
給出我的解法:
演算法思路:
該演算法需要一個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;
}
以上代碼經過測試,如果問題,請聯絡本人。 bicheng.gui@gmail.com