WilliamStart 2020-12-17 18:58 采纳率: 50%
浏览 469
已采纳

C语言读取TXT文件并统计各个汉字出现的次数?

#include "stdio.h"
#include "stdlib.h"
main()
{
	
	long long c;
	char a[100]={0};
	long long b[100]={0},i,k,l,j=0;
	FILE *fp;
	fp=fopen("date.txt","r");
	if(fp==NULL)
	{
		printf("Fail!");
		exit(1);
	}
	else
	{
		while((c=getc(fp))!=EOF) 
		{
			putchar(c);
			for(i=0,k=0;a[i]!='\0';i++)
			{
				if(c==a[i]) k=1,l=i;
			}
			if(k==0) a[j++]=c;
			if(k==1) b[l]++;
		} 
		printf("\n");
		fclose(fp);
		for(i=0;a[i]!=0;i++)
		{
			putchar(a[i]);
			printf(":%d\n",b[i]);
		}

	}
}  

可以正常输出汉字,但要统计各个汉字出现的次数时就出问题了

  • 写回答

2条回答 默认 最新

  • 天际的海浪 2020-12-17 21:25
    关注

    getc(fp)是一个字节一个字节的读取
    而一个汉字是由两个字节组合成的(根据不同的编码也可能是3或4个字节组合一个汉字)。
    你连续用putchar(c)一个字节一个字节的输出,到显示时就会把相邻的两个字节两个字节组合显示。

    但是a这个字符数组中每个元素只能存储半个汉字(也就是一个字节)
    你每次统计的只是这半个汉字编码的出现的次数
    输出也是半个汉字+ :%d\n 输出,汉字的两个字节不相邻自然不能组合显示。
     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥66 定制开发肯德基自动化网站下单软件
  • ¥20 vscode虚拟环境依赖包未安装
  • ¥15 odoo17关于owl开发js代码问题
  • ¥15 光纤中多普勒频移公式的推导
  • ¥15 怎么制作一个人脸识别门禁系统
  • ¥20 大华dss监控平台网络关闭登不进去
  • ¥15 请使用蚁群算法解决下列问题,并给出我完整的代码
  • ¥20 关于php录入完成后,批量更新数据库
  • ¥15 请教往复密封润滑问题
  • ¥15 cocos creator发布ios包