c语言中文本文件字节数统计的程序,统计一个文本文件中的单词个数和汉字个数...

已结贴√

问题点数:40 回复次数:20

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

统计一个文本文件中的单词个数和汉字个数

统计一个文本文件中的单词个数和汉字个数

我在word里面输入了一段中文,一段英文 看它统计的数据(比如单词99 ,汉字99)

然后用一下程序实现统计,发现代码实现的统计数目均会多一个(如 单词100 ,汉字100)

这个问题怎么解决呢? 代码有点长。。。

环境:xp系统

软件:Microsoft Visual C++ 2008

语言:C

#include

#include

#include

int readData(char filename[]);

void writeData(int n , int x);

int hanzi(char filename[]);

int main(void)

{

char name[40] = "e:\\abc2.txt";

int word_num;

int hanzi_num;

word_num = readData(name);

hanzi_num = hanzi(name) ;

writeData(word_num, hanzi_num);

return 0;

}

int readData(char filename[]) //此函数计算英文单词个数

{

FILE* fp;

char ch;

char flag = 0;

int num=0;

if((fp = fopen(filename,"r")) == NULL)

{

printf("%s open failure",filename);

exit(EXIT_FAILURE);

}

printf("%s open sucessfully!~\n",filename);

while(!feof(fp))

{

ch = fgetc(fp);

//(ch < 0x80)  排除汉字的干扰

if((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9'))

flag = 0;

else if(flag == 0 && (ch != '-' && ch != '/'&& ch != '\''))

{

num++;

flag = 1;

}

}

fclose(fp);

return num;

}

int hanzi(char filename[])         //此文件计算汉字个数

{

FILE* fp;

int ch;  //注意这里是int型的

int count = 0;

if((fp = fopen(filename,"r")) == NULL)

{

printf("%s open failure.\n",filename);

exit(EXIT_FAILURE);

}

while(!feof(fp))

{

ch = fgetc(fp);

if(ch == -1)

break;

if(ch >= 0x80)

{

count++;

ch = fgetc(fp);//为什么要再来一次? 哦 因为fgetc每次只能取到一个字节 汉字是两个字节(可能是为了废掉一个字节)

}

}

fclose(fp);

return count;

}

void writeData(int n,int x)  //此文件输出

{

FILE* fp;

if((fp = fopen("D:\\result.txt","a")) == NULL)

{

printf("File open failure!!!");

exit(EXIT_FAILURE);

}

fprintf(fp,"文件中的单词个数为%d\n",n);

fprintf(fp,"文件中的汉字个数为%d\n",x);

printf("文件中的单词个数为%d\n",n);

printf("文件中的汉字个数为%d\n",x);

printf("结果保存在D:\\result.txt当中\n");

fclose(fp);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值