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

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵