分享
 
 
 

在C程序中处理汉字

王朝c/c++·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

学习过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]="孙悟空"; /*数组长度为7说明最多可存放3个汉字*/

假如把数组长度定义为6,系统在编译时并不报错,但是当运行程序时有时会莫名其妙地重复输出或多输出汉字,假如出现这种情况,应当首先考虑数组长度是否有问题。当然在定义的同时初始化可以省略数组长度,如:

static char array[]={"中国计算机软件专业技术水平考试"};

同样可以定义二维数组,下面这个二维数组可以存放10个人名:

char member[10][8]; /*10个元素,每个元素中最多能放3个汉字(不是4个!)*/

因为二维数组member[10][8]可以看成非凡的一维数组member[0],member[1],…,member[9],这些一维数组分别表示各行,而一行就表示了一个人名,因此假如想操作每个人名,只需写成member[0],member[1],…而不写成member[0][8],member[1][8],…。

顺便提一下,在C编译窗口中输入汉字需要中文环境。假如读者用的是DOS操作系统,那么就需要安装CCDOS或UCDOS;假如是WIN95/98操作系统,则在DOS命令窗口中运行下面这个批处理文件即可,而不必另外安装中文DOS系统:

C:\WINDOWS>PDOS95

在C编辑窗口中用Ctrl+空格键启动WIN95中文输入法。另外由于C程序是基于DOS的,因此编辑、编译C程序最好在全屏幕状态,否则轻易出现问题。

下面给出一个实例程序,它的功能是计算出输入年份的天干地支。

#include "string.h"

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; /*以1804年为参考年份,1804年是甲子年*/

b=(year-1804)%12;

strcpy(gz,tg[a]);

strcat(gz,dz[b]);

printf("%d年的干支为:%s\n",year,gz);

}

运行结果:

请输入一个年份:1999

1999年的干支为:己卯

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有