一、状态机介绍
链接: 状态机介绍.
状态机设计思想主要作用是让代码逻辑更加清晰,更易于拓展。
二、示例
输入一段字符串,字符串由字母和分隔符(空格,逗号,句号等)组成,写一个函数统计该字符串中的单词数。
状态:
typedef enum _count_state_t { //计数状态
STATE_START, //开始
STATE_ON_WORD, //单词
STATE_ON_DIVISION, //分隔符
STATE_END //结束
}count_state_t;
判断函数:
static int is_end(char ch) { //结束符判断
return (ch == '\0') ? 1 : 0;
}
static int is_division(char ch) { //分隔符判断
return (ch == ',' || ch == '.' || ch == ' ') ? 1 : 0;
}
单词计数函数:
int count_word(const char *str, int len) {
count_state_t state = STATE_START;
int count = 0;
for(int i = 0; i < len; i++) {
char ch = *(str + i);
if(state == STATE_START) { //开始状态处理
if(is_division(ch))
state = STATE_ON_DIVISION;
else if(is_end(ch))
state = STATE_END;
else
state = STATE_ON_WORD;
} else if(state == STATE_ON_WORD) { //单词状态处理
if(is_division(ch)) {
count++;
state = STATE_ON_DIVISION;
} else if(is_end(ch)) {
count++;
state = STATE_END;
}
} else if(state == STATE_ON_DIVISION) {//分隔符状态处理
if(is_division(ch));
else if(is_end(ch))
state = STATE_END;
else
state = STATE_ON_WORD;
} else if(state == STATE_END) //结束状态处理
break;
}
return count;
}