1. 程式人生 > >C/C++ -- 判斷字符串中存在中文

C/C++ -- 判斷字符串中存在中文

return text sci .net lse col c++ std 需要

電腦系統中的英文字符串和中文字符最根本的區別就在於: 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      gb2312碼表:https://blog.csdn.net/oshan2012/article/details/79070705
方法一: #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; }

C/C++ -- 判斷字符串中存在中文