1.LinuxC单词统计

一、具体描述

利用状态机算法实现统计文件单词个数功能

二、状态机算法

使用状态机解决问题,主要有两个步骤:
1、确定系统总共有几个状态 	
2、确定状态之间的迁移过程,即分析由什么状态到达什么状态

在单词统计中,
1、可以看作有两个状态,OUT(间隔状态)和 IN(字母状态)
2、当间隔状态转变为单词状态时,单词个数+1
如图:
请添加图片描述

三、代码实现

#include <stdio.h>

#define OUT		0
#define IN		1
#define INIT	OUT
int splite(char c) {
	if ((' ' == c) || ('\n' == c) || ('\t' == c) ||
			('\"' == c) || ('\'' == c) || ('+' == c) ||
			(',' == c) || ';' == c || '.' == c)
		return 1;
	else
		return 0;
	
}

int count_word(char *filename) {

	int status = INIT; //定义初始状态
	int sum = 0; 	   //单词总数

	FILE *fp = fopen(filename, "r");
	if (fp == NULL) return -1;

	char c ;
	while ((c = fgetc(fp)) != EOF) {
		if (splite(c)) { //
			status = OUT;
		} else if (OUT == status) {
			status = IN;
			sum ++;
		}
	}
	return sum;
}


int main(int argc, char *argv[]) {

	if (argc < 2) return -1;

	printf("word: %d\n", count_word(argv[1]));

}


四、代码分析

status其实在循环中可以看作上一次状态,只有当前状态是IN(字母状态)status是OUT(空格状态)时单词个数+1,然后在注意维护status变量即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值