一个简单的有穷状态机-单词数统计程序
 1 #include <iostream>
 2 #include <cctype>
 3 
 4 class WordCounter
 5 {
 6     enum class _state
 7     {
 8         STATE_INIT = 0,
 9         STATE_IN_WORD,
10         STATE_OUT_WORD,
11     };
12 public:
13     static int count_words(const char* text);
14 };
15 
16 int WordCounter::count_words(const char* text)
17 {
18     int counts = 0;
19     _state state = _state::STATE_INIT;
20     const char* it = text;
21 
22     for (; *it != '\0'; it++)
23     {
24         switch (state)
25         {
26         case WordCounter::_state::STATE_INIT:
27             if (isalpha(*it))
28             {
29                 state = _state::STATE_IN_WORD;
30             }
31             else
32             {
33                 state = _state::STATE_OUT_WORD;
34             }
35             break;
36         case WordCounter::_state::STATE_IN_WORD:
37             if (!isalpha(*it))
38             {
39                 state = _state::STATE_OUT_WORD;
40                 //状态发生转换
41                 counts++;
42             }
43             break;
44         case WordCounter::_state::STATE_OUT_WORD:
45             if (isalpha(*it))
46             {
47                 state = _state::STATE_IN_WORD;
48             }
49             break;
50         default:
51             break;
52         }//switch
53     }//for
54     if (_state::STATE_IN_WORD == state)
55     {
56         counts++;
57     }
58     return counts;
59 }
60 
61 int main(int argc, const char* argv[])
62 {
63     using namespace std;
64     char* text = "   my  name is\r\n Percy!!this is BBC English";
65     cout << text << '\n' << WordCounter::count_words(text) << endl;
66     getchar();
67     return 0;
68 }

使用状态机的直接好处就是让问题分析简单化。

posted on 2014-09-25 22:43  Zolman  阅读(655)  评论(0)    收藏  举报