zoukankan      html  css  js  c++  java
  • C/C++ -- 判断字符串中存在中文

     

    电脑系统中的英文字符串和中文字符最根本的区别就在于:
    1、英文的 ASCII 码,其最高位为 0,占一个字节
    注:英文的ASCII码范围是在0到127,二进制为(0000 0000 ~ 0111 1111)
    2、中文的 ASCII 码,其最高位为 1。占两个字节,
    注:两个字节的最高位都是1
    因此可以看出,可以拿字符串中的每个字节和ASC||的最高位也就是0x80(1000 0000)比较,如果一开始并且有两个连续的字符比0x80大,那么这两个字符合在一起为一个中文
     

    再例如:若需要处理的字符是汉字的话,那么其 ASCII 码最高位为 1。位于汉字符号区的区位码,第一个汉字是从“啊”字开始的,其区位码是:1601,但是它的汉字内码是这样计算的:

      区码 16:16+160 = 176,转换成十六进制:B0,其对应的二进制为:10110000

      位码 01:01+160 = 161,转换成十六进制:A1,其对应的二进制为:10100001

    方法一:
    复制代码
    #include <stdio.h>
    #include <string.h>
     
    int main()
    {
    char sztext[] = " 是ciw.";
    char c = 0;
    char szchinese[3] = {0};
     
    int i = 0, nlen = strlen(sztext);
    for(; i < nlen; i++)
    {
      //不是全角字符
      if( sztext[i] >= 0 && sztext[i] <= 127 )
      c = sztext[i], printf("%c
    ", c);
      //是全角字符
      else
      {
        szchinese[0] = sztext[i], szchinese[1] = sztext[i + 1];     printf("%s ", szchinese);     i++; //中文是2个字节,所以i++
      }
    } return 0; }
    复制代码
    注:全角字符,简单来讲就是占两个字节的中文
    半角字符就是0~127的ASCii码
     
    方法二:
    复制代码
    #include <stdio.h>
    //返回0:无中文,返回1:有中文
    int IncludeChinese(char *str)
    {
    char c;
    while(1)
    {
            c=*str++;
            if (c==0) break;  //如果到字符串尾则说明该字符串没有中文字符
            if (c&0x80)        //如果字符高位为1且下一字符高位也是1则有中文字符
                    if (*str & 0x80) return 1;
        }
        return 0;
    }
    复制代码

    原文地址:https://www.cnblogs.com/goul/p/10274171.html

  • 相关阅读:
    alipay h5支付接口总结
    ztree js 和父子节点递归 使用注意
    .net framework to mono 绿色运行摘记
    curl 命令行用法摘记
    C# Camera2 实现扫描识别二维码及Texture预览
    .net framework 3.5 安装命令
    android 调用相机
    Xamarin Android 定时刷新UI
    Xamarin 动态申请 android 权限
    C# 生成和识别二维码
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10989885.html
Copyright © 2011-2022 走看看