在面試環(huán)節(jié)中,有一道題目也是考官們中意的一道題目:如果統(tǒng)計(jì)一段由字符和和空格組成的字符串中有多少個(gè)單詞?
其實(shí),之所以問這個(gè)題目,考官的目的就是想了解一下你對(duì)狀態(tài)機(jī)了解多少。
(1) 題目分析
從題目上看,如果對(duì)一個(gè)字符串進(jìn)行處理,那么可以有下面幾種情形:初始狀態(tài),字符狀態(tài),空格狀態(tài),結(jié)束狀態(tài)。那么這幾種狀態(tài)之間應(yīng)該怎么遷移呢?
初始狀態(tài): 如果輸入符號(hào)是空格,那么進(jìn)入空格狀態(tài);如果是字符,那么就進(jìn)入字符狀態(tài),同時(shí)單詞個(gè)數(shù)+1;如果是結(jié)束狀態(tài),那么直接返回;
字符狀態(tài):如果輸入符號(hào)是空格,那么進(jìn)入空格狀態(tài);如果是字符,那么什么也不做;如果是結(jié)束,直接返回;
空格狀態(tài):如果輸入符號(hào)是空格,那么什么也不做;如果是字符,那么進(jìn)入字符狀態(tài),同時(shí)單詞個(gè)數(shù)+1;如果結(jié)束狀態(tài),那么直接返回。
/* 輸入是字符
* --------> 字符狀態(tài) ----------
* | | -->
* 初始狀態(tài) 輸入字符 | | 輸入空格 結(jié)束狀態(tài)
* | -->
* ---------> 空格狀態(tài) ----------|
* 輸入是空格
*/
(2)根據(jù)上面描述的狀態(tài)遷移過程,編寫對(duì)應(yīng)的代碼
typedef enum{
INIT_STATE = 1,
WORD_STATE,
SPACE_STATE,
};
int count_word_number(const char* pStr)
{
int count = 0;
int state = INIT_STATE;
char value ;
if(NULL == pStr)
return 0;
while(value = *pStr++){
switch (state)
{
case INIT_STATE:
if(' ' != value)
count ++, state = WORD_STATE;
else
state = SPACE_STATE;
break;
case WORD_STATE:
if(' ' == value)
state = SPACE_STATE;
else if('