C 语言中处理汉字 |
您所在的位置:网站首页 › 每个汉字几个字节 › C 语言中处理汉字 |
学习过 C 语言的人也许有时会遇到这样一个问题:如何用变量存储汉字以及对这些变量进行操作。目前许多 C 语言参考书中都没涉及到这个问题,程序中多为处理英文变量和英文字符串,涉及到汉字的情况也大都是在 printf 语句中输出提示信息或结果,如: printf("请输入a,b的值:\n"); printf("输出功率为%s千瓦。\n",power); 考虑到还有相当一部分人在学习和应用 C 语言,因此在这里向读者介绍一下笔者在这方面摸索出来的经验。 存储汉字应该用字符数组,这一点是肯定的,关键问题是汉字在你的计算机系统上占几个字节。多数人会认为一个汉字肯定占两个字节,其实不然。汉字到底占几个字节,这是随系统不同而不同的,而且还依赖于软件环境,如 Visual Basic 中汉字占一个字节。 可以在你的计算机上用strlen()函数测试一下,如: printf("%d",strlen("计算机")); 若输出为 6,则每个汉字占两个字节;若输出 12,则每个汉字占四个字节。大多数系统是每个汉字占两个字节的,即上述语句输出值为 6。应当注意的是一个全角字符(包括标点符号)同汉字占据相同的字节。本文假定每个汉字占两个字节。这样你就可以用字符数组存储汉字了,但别忘了,由于 C 语言中字符串是以'\0'作为结束标记的,系统会自动加上这个标记符,而用 strlen() 函数测试的返回值不包括这个'\0',因此在定义和初始化字符数组时应当使数组长度最小为实际字符串长再加 1,如: static char name[7]="孙悟空"; 如果把数组长度定义为 6,系统在编译时并不报错,但是当运行程序时有时会莫名其妙地重复输出或多输出汉字,如果出现这种情况,应当首先考虑数组长度是否有问题。当然在定义的同时初始化可以省略数组长度,如: static char array[]={"中国计算机软件专业技术水平考试"}; 同样可以定义二维数组,下面这个二维数组可以存放10个人名: char member[10][8]; 因为二维数组 member[10][8] 可以看成特殊的一维数组 member[0],member[1],…,member[9],这些一维数组分别表示各行,而一行就表示了一个人名,因此如果想操作每个人名,只需写成 member[0],member[1],…,而不写成 member[0][8],member[1][8],…。
下面给出一个实例程序,它的功能是计算出输入年份的天干地支。 #include "string.h" void main() { int a,b,year; char gz[6]; static char tg[10][3]={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"}; static char dz[12][3]={"子","丑","寅","卯","辰","巳","午","未","申","酉","戍","亥"}; printf("请输入一个年份:"); scanf("%d",&year); a=(year-1804)%10; b=(year-1804)%12; strcpy(gz,tg[a]); strcat(gz,dz); printf("%d年的干支为:%s\n",year,gz); } 运行结果: 请输入一个年份:1999 1999年的干支为:己卯
本文转自 http://rangercyh.blog.51cto.com/1444712/416502 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |