栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

       前言:在站里看到许多关于这个问题的文章,都大差不差,但基本用的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]={''};    //定义字符数组,这里初值也可不赋。
	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);}

运行结果为:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/821107.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号