【c语言】使用char数组实现对中文汉字的处理
·
前言:问题来源于我做哈夫曼编码和译码实训的时候,题目要求输入一段英文或中文。然后对其中的英文或中文进行检索,才能计算出相应的哈夫结点权值,构造哈夫曼树求哈夫曼编码。
对于中文的处理,头脑空白,只能想起一个char类型的变量无法存储中文汉字。然后我在查阅了许多对于c语言有关中文的文章之后,解决了把一个中文汉字当做变量来处理的问题。
我们可以先用strlen函数查看中文汉字占见个字节,(这里要注意不同字符集编码下的字节长度有所不同,包括英文字母,可以用strlen查看字节数)
我们可以发现,中文占两个字节,而char类型是一个字节长度的;因此,它的长度与char类型数据并不符合。这也就意味着我们不能像char类型一样简单操作中文字符。
问题总有解决的办法,像GB2312这些大多汉字编码,典型的用2个字节来表式大多数常用的中文汉字,最多可以表式65536个汉字,(同时:字符在数组中的存储是连续的)
所以我们可以用一个char数组实现对中文字符的操作,例如:
一、想要存入一个或多个中文:
#include<stdio.h> int main() { char ch[12]; //输入一个中文 scanf("%c%c",&ch[0],&ch[1]); printf("%c%c",ch[0],ch[1]); //输入一个中文 scanf("%c%c",&ch[2],&ch[3]); printf("%c%c",ch[2],ch[3]); //输入任意个中文(不超过数组长度-1,数组有一个结束符'\0') scanf("%s",ch); printf("%s",ch); return 0; }
二、对其中的一些中文取出:
#include<stdio.h>
int main()
{
char ch[15]={"这里有七个中文"};
printf("char数组中第1个中文:\n");
printf("%c%c\n",ch[0],ch[1]);
printf("char数组中第2个中文:\n");
printf("%c%c\n",ch[2],ch[3]);
printf("全部中文:\n");
int j=1;
for(int i=0;i<=12;i+=2)
printf("第%d个中文是:%c%c\n",j++,ch[i],ch[i+1]);
return 0;
}
三、判断两个中文是否相等:
#include<stdio.h>
int main()
{
char ch1[3]="中";
char ch2[3]="汉";
char ch3[3]="汉";
if(ch1[0]==ch2[0]&&ch1[1]==ch2[1])
printf("ch1与ch2不相等\n");
else printf("ch1与ch2相等\n");
if(ch2[0]==ch3[0]&&ch2[1]==ch3[1])
printf("ch2与ch3不相等\n");
else printf("ch2与ch3相等\n");
return 0;
}
当然,如有需要也可以同时存入英文和中文;
总之,char类型一个字节用一个%c就可以表示,中文需要两个%c%c才能表示.
以上就是我的总结,如有总结不到位的地方,还望各位指点~
更多推荐
所有评论(0)