C/C++的基本功了,在看ICTCLAS分词源码的时候偶然看到,写段例子验证一下。
由于ANSI字符有128个, 所以, ANSI字符的bit最高位为0, 当bit最高位为1时, 就表示是个双字节字符了。而char(也即是signed char)的正负恰好由最高位决定,于是直接利用char < 0 来判断是否是双字节字符了。
#include <iostream>
using namespace std;
///////////////////////////SubMain//////////////////////////////////
int main(int argc, char *argv[])
{
char szText[] = "hankcs是坏蛋";
unsigned int nPosIndex = 0, // 当前指针
nParagraphLen = strlen(szText); // 源字串长度
char sChar[3];
sChar[2] = 0;
while (nPosIndex < nParagraphLen)
{
sChar[0] = szText[nPosIndex];//Get a char // 取一个字符
sChar[1] = 0;
if (sChar[0] < 0) // 双字节字符
{
nPosIndex += 1;
sChar[1] = szText[nPosIndex];
cout << sChar << " 是双字节字符" << endl;
}
else
{
cout << sChar << " 是单字节字符" << endl;
}
nPosIndex += 1;
}
system("pause");
return 0;
}
///////////////////////////End Sub//////////////////////////////////
输出:
h 是单字节字符 a 是单字节字符 n 是单字节字符 k 是单字节字符 c 是单字节字符 s 是单字节字符 是 是双字节字符 坏 是双字节字符 蛋 是双字节字符 请按任意键继续. . .

码农场