我正在用C ++构建一个MFC项目。我有一个文本字段,用户需要输入一个数字。我可以在使用英文键盘时将其转换为整数。但是当用户切换到日语键盘时,它不起作用。
我知道日语键盘会创建双字节字符。但我不知道如何将它们转换为整数。
Sory缺乏信息。
我的目的是检查文本字段中的输入用户类型是否为数字。 但它无法识别日文键盘的数字。 我尝试了一些方法,例如:strtol(),_ wtoi。 但结果(频率)始终为0; 我在debuging时获得的字符串是123456789而不是123456789。 这是我的代码
CString strFrequency;
GetDlgItem(IDC_EDIT_FREQUENCY)->GetWindowText(strFrequency);
if(strFrequency.IsEmpty()){
CDialog::OnOK();
return;
}
for(int i=1; i<strFrequency.GetLength(); i+=2) {
if(!std::isdigit(strFrequency[i])){
MessageBox("数字で入力してください。","発表支援");
return;
}
}
int frequency = atoi(strFrequency);
每个人都可以帮助我吗?
提前致谢
答案 0 :(得分:1)
CString strFrequency;
GetDlgItem(IDC_EDIT_FREQUENCY)->GetWindowText(strFrequency);
DWORD flags = LCMAP_HALFWIDTH;
const int size = strFrequency.GetLength() / 2 + 1;
char* s = new char[size];
ZeroMemory(s, size);
LCMapString(LOCALE_SYSTEM_DEFAULT,
flags,
strFrequency,
strFrequency.GetLength() + 1,
s,
size);
CString convertedText = s;
我解决了。日语键盘输入的字符串( strFrequency )是全宽长度。所以我将全角字符串转换为半角字符串。然后我可以检查它是否是数字字符串。
答案 1 :(得分:0)
如果没有看到试图转换数字的代码,并且至少没有对将日文文本放入其中的实际情况进行简单描述,那么很难说出什么/为什么是错误的。现在,我唯一能想到的是你要么使用错误的数据类型(即CHAR而不是WCHAR),要么就是你试图直接解析像'四万'这样的日语符号和一些像阿拉伯一样的解析器,如atoi() ,或者您可能忘记正确设置流编码或语言环境。
请记住,虽然日语键盘和日语语言环境将能够生成'40000'的文本,可能会用istringstream解析(甚至可能会被某些atoi版本解析),那么几乎可以肯定日语数字就像'四万'(也就是40000)很可能不会被解析。我认为“四万”的文字不是数字 - 但我可能在这里错了!我从来没有尝试过。但是,在搜索了一下后,我没有看到任何提及这是可能的。
但是,似乎有一些解析汉字数字的方法,例如参见How to parse kanji numeric characters using ICU?
答案 2 :(得分:0)
如果此调用编译并确实显示日文字符,
MessageBox("数字で入力してください。","発表支援");
然后,您似乎将项目构建为ANSI,而不是UNICODE。
尝试将项目构建为UNICODE,将调用更改为
MessageBox(L"数字で入力してください。",L"発表支援");