0

我正在用 C++ 构建一个 MFC 项目。我有一个文本字段,用户应该在其中输入一个数字。使用英文键盘时,我可以将其转换为整数。但是当用户切换到日文键盘时,它就不起作用了。

我知道日文键盘会创建双字节字符。但我不知道如何将它们转换为整数。

抱歉信息不足。

我的目的是检查文本字段中输入的用户类型是否是数字。但它无法识别带有日文键盘的数字。我尝试了一些方法,例如:strtol()、_wtoi。但结果(频率)始终为 0;我调试时得到的字符串是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);

大家可以帮帮我吗?

提前致谢

4

3 回答 3

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)是全角长度。所以我将全角字符串转换为半角字符串。然后我可以检查它是否是数字字符串。

于 2013-04-10T03:03:03.883 回答
0

如果没有看到您尝试转换数字的代码,并且至少没有对将日文文本放入其中时实际发生的情况进行松散的描述,那么很难说出什么/为什么是错误的。目前,我唯一能想到的是,您要么使用了错误的数据类型(即 CHAR 而不是 WCHAR),要么您正在尝试使用诸如 atoi() 之类的纯阿拉伯语解析器直接解析诸如“四万”之类的日文符号,或者您可能忘记正确设置流编码或语言环境。

请记住,虽然日文键盘和日文语言环境将能够生成“40000”的文本,这可能会被 istringstream 解析(甚至可能会被某些 atoi 版本解析),那么几乎可以肯定的是像“四万”这样的日文数字(这也是 40000)很可能不会被解析。我认为'四万'被分类为文本而不是数字 - 但我在这里可能非常错误!我从未尝试过。但是,经过一番搜索,我没有看到任何提及这是可能的。

但是,似乎也有一些方法可以解析汉字数字,例如如何使用 ICU 解析汉字数字字符?

于 2013-04-08T08:14:16.937 回答
0

如果此调用编译并确实显示了日文字符,

MessageBox("数字で入力してください。","発表支援");

那么看来您正在将项目构建为 ANSI,而不是 UNICODE。

尝试将您的项目构建为 UNICODE,将调用更改为

MessageBox(L"数字で入力してください。",L"発表支援");
于 2013-04-08T12:52:55.333 回答