帮帮忙,如何知道CString 字符串里是否有中文(或者非英文字母)

cpx 2005-08-10 04:45:31
如:
CString str="abc中文";
难道要每个ASC码这么核对啊!
有谁知道,先谢了!
...全文
286 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
laofang 2005-09-28
优化了一下:
BOOL HasWChar2(CString str)
{
if(str.IsEmpty())
return FALSE;

unsigned char *beg, *ori;
beg = ori = (unsigned char*)str.GetBuffer(0);
str.ReleaseBuffer();

unsigned char *tmp;
int bytes=0;
while((tmp = _mbsinc(beg)) <= beg + str.GetLength())
{
++bytes;
if(tmp-ori > bytes) // 字符长度大于字节长
return TRUE;

beg = tmp;
}

return FALSE;
}
回复
flyelf 2005-09-28
IsDBCSLeadByte
回复
laofang 2005-09-28
判断字串中是否包含宽字节字符(包括中、日等文字):
BOOL HasWChar(CString str)
{
unsigned char *beg = (unsigned char*)str.GetBuffer(0);
str.ReleaseBuffer();

int nByteLen = str.GetLength();
unsigned char *end = beg + nByteLen;

int nCharLen=0;
unsigned char *tmp;
while((tmp = _mbsinc(beg)) <= end)
{
nCharLen++;
beg = tmp;
}

if(nByteLen == nCharLen) // 字节数和字符数一致,则认为不包含宽字节字符
return FALSE;
else
return TRUE;
}
回复
long_xing 2005-09-28
可以判断哪个字节是小于1的,就可以判定该字符是汉字的一部分。
回复
summer54 2005-09-28
The IsDBCSLeadByteEx function determines whether a specified byte is a lead byte, that is, the first byte of a two-byte character in a double-byte character set (DBCS) for the specified code page.

BOOL IsDBCSLeadByteEx(
UINT CodePage, // identifier of code page
BYTE TestChar // byte to test
);
回复
goodboyws 2005-09-28

int iLen =0;
while (iLen<str.GetLength())
{
if (IsDBCSLeadByteEx(936, str[iLen]))
{
CString hz = str.Mid(iLen, 2);
printf(hz);
iLen += 2;
}
else
iLen++;
}
回复
phoenix96_2000 2005-09-28
英文字母:isalaph()
可打印字符: isprint()

至于判断是否是中文,和编码有关系,
回复
dirdirdir3 2005-09-28
好像没有什么好办法,逐个核对也不麻烦阿。
回复
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2005-08-10 04:45
社区公告
暂无公告