一步一步寫演算法(之單詞統計)

來源:互聯網
上載者:User

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】

    在面試環節中,有一道題目也是考官們中意的一道題目:如果統計一段由字元和和空格組成的字串中有多少個單詞?

    其實,之所以問這個題目,考官的目的就是想瞭解一下你對狀態機器瞭解多少。

    (1) 題目分析

    從題目上看,如果對一個字串進行處理,那麼可以有下面幾種情形:初始狀態,字元狀態,空格狀態,結束狀態。那麼這幾種狀態之間應該怎麼遷移呢?

    初始狀態: 如果輸入符號是空格,那麼進入空格狀態;如果是字元,那麼就進入字元狀態,同時單詞個數+1;如果是結束狀態,那麼直接返回;

    字元狀態:如果輸入符號是空格,那麼進入空格狀態;如果是字元,那麼什麼也不做;如果是結束,直接返回;

    空格狀態:如果輸入符號是空格,那麼什麼也不做;如果是字元,那麼進入字元狀態,同時單詞個數+1;如果結束狀態,那麼直接返回。

/*          輸入是字元*           -------->    字元狀態 ----------*          |                               | -->*      初始狀態  輸入字元  |  |  輸入空格            結束狀態*          |                                 -->*          --------->    空格狀態 ----------|*            輸入是空格*/

    (2)根據上面描述的狀態遷移過程,編寫對應的代碼

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;elsestate = SPACE_STATE;break;case WORD_STATE:if(' ' == value)state = SPACE_STATE;else if('\0' == *pStr)return count;break;case SPACE_STATE:if(' ' != value)count ++, state = WORD_STATE;else if('\0' == *pStr)return count;break;default:break;}}return count;}

    (3)編寫測試案例,驗證代碼是否編寫正確

void test(){assert(0 == count_word_number(NULL));assert(0 == count_word_number(""));assert(1 == count_word_number("hello"));assert(3 == count_word_number("china baby hello"));}

總結:

    1)狀態機器是編程人員的基本功,它和另外一種方法回呼函數註冊一樣,使我們在日常開發中經常用到的一種方法

    2)狀態機器是電腦網路通訊的重要內容,想要對tcp-ip協議棧加深瞭解的朋友尤其需要重點掌握

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.