放牧代码和思想
专注自然语言处理、机器学习算法
    Why join the Navy if you can be a pirate?

判断双字节字符

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 是单字节字符
是 是双字节字符
坏 是双字节字符
蛋 是双字节字符
请按任意键继续. . .

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » 判断双字节字符

分享到:更多 ()

评论 欢迎留言

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

我的开源项目

HanLP自然语言处理包基于DoubleArrayTrie的Aho Corasick自动机