【番杰的问答笔记】c语言中汉字如何计数的问题

1. 问题

今天学了一个统计字符数的代码

#include <stdio.h>

int main()
{
    int count = 0 ;

    printf("请输入英文字符:");

    while ( getchar() != '\n')
    {
        count = count + 1;//这个算式不是用来计数的吗?为什么中文会计对应两个字符?
    }

    printf("你总共输入了%d个字符", count);

    return 0;
}

本来我理解count = count + 1 这个表达式是用来统计字符数的。

但是我在试着输入中文的时候,程序统计中文是2个字符,结果如下:

请输入英文字符:你好
你总共输入了4个字符

所以,我想重新了解一下这个程序是怎么统计字符的?能否对代码的每一个作用部位有一个详细解释?

2. 回答

在计算机中存储中文使用的编码规则是GB2312或GB2312-80,规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,连在ASCII里本来就有的数字、标点、字母都通通重新编了两个字节长的编码,这就是常说的“全角”字符,而原来在127号以下的那些就叫“半角”字符。

就这么说吧,字母和英文输入法下的一些标点符号都可以用ascii码形式表示,占一个字符,
而汉字和中文下的标点符号就用到了其他的解码标准来实现,像GB2312之类的标准,还有其他的感兴趣自行百度。它是占两个字符的,这也是为啥你打代码的时候,英文的分号可以,而中文的分号不可以,他俩代表着不同的数值;

再说回你的这个问题,你输入“你好”,在计算机看来就相当于输入了四个字符:“xxyy ”(具体是啥我也不知道,xx合在一起表示“你”,yy合在一起表示“好”,这个具体的值根据使用到解码规则有关),所以在循环的时候就一共执行了4次count++;所以结果是4.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

番杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值