c++builder中如何区分一个String串中的字母数字和汉字?

来源:百度知道 编辑:UC知道 时间:2024/05/07 07:16:59
我想将Memo1控件中的串取出来,一个一个的取出来,当遇到汉字时如果单取会只取一半, 而如果两个两个的取当字母有三个后面接汉字时又会出错,请问如何处理啊???

大致的意思就像楼上说的,我这里给个例子:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString str=Memo1->Lines->Strings[0];
AnsiString tmp="";
for (int i=1;i<=str.Length();i++){
if ((str[i]&0x80)>>7){//判断最高位是否为1
tmp=str.SubString(i,2);//取2个字符
++i;
}else{
tmp=str[i];//否则只取1个
}
Memo1->Lines->Add(tmp);
}
}

字母的Ascii码是128以下,汉字是128以上(准确一点应该是比128大的一个数,不过简单用的话大于128就行了),判断一下就行了。
P.S: char类型在C++中有时是signed的,即范围是-128--127,所以判断大于128可能会出现逻辑错误,最好是这样判断:

//假设a是你取出的一个字符

if ((a<128) && (a>=0))
那么a是字母;
else
a为汉字的一部分,继续取下一位以组成一个汉字