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

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条)

报告相同问题?

悬赏问题

  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
  • ¥15 Mac(标签-IDE|关键词-File) idea
  • ¥15 潜在扩散模型的Unet特征提取
  • ¥15 iscsi服务无法访问,如何解决?
  • ¥15 感应式传感器制作的感应式讯响器