我正在检查CString变量是否只包含中文字符。中文字符的Unicode范围是4E00 - 9FFF。
我的做法如下:
CString str;
char ch;
GetDlgItemText( IDC_EDIT1, str );
for(int i=0;i<str.GetLength();i++) {
ch=str[i];
if(ch>='\u4E00'&&ch<='\u9FFF') {
//even if input chinese character here 'if' evaluates to false
SetDlgItemText( IDC_RICHEDIT21, str );
SendDlgItemMessage( IDC_RICHEDIT21, EM_REPLACESEL, TRUE, (LPARAM)(LPCTSTR)str);
} else
break;
但如果我这样做
if(ch=='\u4E00')
并输入\ u4E00的符号,然后就可以了。
所以我的问题是,如何找到特定Unicode范围之间的字符天气?
还有一件事:如果我使用if(ch=='\u4e00')
然后它给出了true,但是如果我if(ch<='\u4e00')
它返回false。我不明白这种行为!
我的代码是
CString str;
wchar_t ch;
GetDlgItemText( IDC_EDIT1, str );
for(int i=0;i<str.GetLength();i++) {
ch=str[i];
if(ch<='\u4e01') {
//returns false, but returns true if(ch=='\u4e01')
SetDlgItemText( IDC_RICHEDIT21, str );
SendDlgItemMessage( IDC_RICHEDIT21, EM_REPLACESEL, TRUE, (LPARAM)(LPCTSTR)str);
else
break;
}
答案 0 :(得分:1)
汉字范围:
您必须检查所有这些范围是否完整和彻底。
答案 1 :(得分:0)
“char”类型的范围是-128~127或0~255,具体取决于您的编译器。 您应该使用“wchar_t”或“unsigned short”使其范围为0到65535,或者varible不能表示unicode字符。
顺便说一下,你不应该在“if”块中放置SetDlgItemText和SendDlgItemMessage。在“for”之前定义变量“i”,并在循环之后检查i的值是否等于str.Length()。
答案 2 :(得分:0)
我得到了答案。它可以比较如下:
CString str;
wchar_t ch;
GetDlgItemText( IDC_EDIT1, str );
for(int i=0;i<str.GetLength();i++) {
ch=str[i];
if((unsigned int)ch>=0x4E00u&&(unsigned int)ch<=ox9FFFu) {
SetDlgItemText( IDC_RICHEDIT21, str);
SendDlgItemMessage( IDC_RICHEDIT21, EM_REPLACESEL, TRUE, (LPARAM)(LPCTSTR)str);
} else
break;