状态机是在指在某一个状态经过一个外界刺激转换为例外一个状态,下图是一个简单的状态A转换为状态B的过程
在一个文本单词计算的程序中如何应用状态机
文本中的字符分为单词字符与分隔符,连续的字母组成单词,其他的为分隔符
下面为代码实现
#define SEPARATOR_STATE 0 //分隔符状态
#define WORD_STATE 1 //单词状态
#define INIT_STATE SEPARATOR_STATE //初始状态
int count_word(const char* path)
{
int count = 0;
int state = INIT_STATE;
FILE *fp = fopen(path, "r");
if (nullptr == fp)
{
return count;
}
int ch; //此处使用Int是因为有些字符大于127,unsigned char不能用,因为EOF为-1
while ((ch = fgetc(fp)) != EOF)
{
if (!isalpha(ch)) //非字母则为分割符,切换为分割符状态
{
state = SEPARATOR_STATE;
}
else if (state == SEPARATOR_STATE) //分割符状态, 输入是字母,切换为单词状态
{
state = WORD_STATE;
count++;
}
}
fclose(fp);
return count;
}