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\n", c);
  //是全角字符
  else
  {
    szchinese[0] = sztext[i], szchinese[1] = sztext[i + 1];     printf("%s\n", 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM