如何判断一个字符串里有多少个汉字?(原理及过程)

这篇博客针对C语言初学者,详细解释了如何通过简单的方法将汉字的区位码转换为机内码,并提供了相应的C语言代码实现。文章强调了在转换过程中,汉字在内存中以两个字节存储,其最高位为1代表负数,这是由于汉字存储遵循的国标码标准。通过实例展示了具体转换步骤,并给出了检测输入字符串中汉字数量的C语言代码。
摘要由CSDN通过智能技术生成

       前言:在站里看到许多关于这个问题的文章,都大差不差,但基本用的java语言,且讲述原理的过程比较繁琐、晦涩,不适于c语言初学者。文中涉及到区位码、国标码、机内码的转换,可跳过。

解该题目需要一定的计算机基础,我们在这里用通俗易懂的文字、代码,来给大家讲解这一问题。

正文:我们知道,汉字(包括中文符号、全角符号)在内存中存储需要两个字节,而汉字是遵循国标码标准用机内码存储于内存中的。国标码化为机内码需要两个字节分别加上(80 80)H,在这里我们跳过这一步直接将区位码加上(A0 A0)H.

汉字的区位码转换为十六进制后,两个字节分别加上(A0 A0)H,此时不论该汉字的区位码是多少,它的最高位是大于等于A的,转化为二进制时它的最高位是等于1的,而在C语言中,一个字节的最高位代表符号位,若符号位为1则该字节存储的数为负数(符号位1代表负数,0代表正数)。

(过程可跳过,了解原理即可)

转换过程及计算:例如某汉字的区位码为19 34(前两数代表区,后两位代表位)

我们将它分别化为十六进制:(13 22)H

然后分别加上(A0 A0)H:  (B3 C2)H,此时这个数就是机内码了。

最后将该数转化为二进制:10110011   11000010

我们可以看到两个字节的最高位分别为1.

我们用C语言代码来实现:

#include"stdio.h"
void main(){
	char s[99]={'\0'};    //定义字符数组,这里初值也可不赋。
	int i=0,j=0;           //定义j为汉字个数,赋初值为0.
	gets(s);              //输入字符串到a数组。
	while(s[i])
	if(s[i++]<0&&s[i]<0)   //判断当前元素以及下一个(i++将下标下移一次)元素最高位是否为1
		i++,j++;            //如果符合汉字的条件,则下标再下移一次。
	printf("%d",j);}

运行结果为:

 

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值