如何判断LPCWSTR文本是否为数字?

时间:2014-10-15 09:44:00

标签: c++

整个字符串需要由整数组成,我们知道的是0123456789我正在尝试使用以下函数,但它似乎无法正常工作

bool isNumeric( const char* pszInput, int nNumberBase )
{
    string base = "0123456789";
    string input = pszInput;

    return (::strspn(input.substr(0, nNumberBase).c_str(), base.c_str()) == input.length());

}

以及在代码中使用它的例子......

isdigit = (isNumeric((char*)text, 11));

即使字符串中的文本

,它也会返回true

1 个答案:

答案 0 :(得分:1)

据推测,问题是text实际上是LPCWSTR const wchar_t*。我们必须从你提出的问题标题和演员表中推断出这个事实。

现在,该演员阵容是一个问题。编译器反对您传递text。它说text不是const char*。通过强制转换你没有改变text是什么,你只是骗了编译器。并且编译器报了仇。

接下来发生的事情是将宽字符缓冲区重新解释为窄8位缓冲区。如果你的宽字符缓冲区有拉丁文本,编码为UTF-16,那么每隔一个字节将为零。因此,重新解释转换会导致isNumeric认为字符串只有1个字符长。

您需要做的是:

  1. 开始在wchar_t中使用UTF-16编码的isNumeric缓冲区。
  2. 在调用isNumeric之前从UTF-16转换为ANSI。
  3. 你应该仔细考虑这一点。看来目前你的程序中有一个非常不合理的ANSI和UTF-16混合。你真的应该选择一个标准字符编码,始终如一地使用它。这对您的程序来说是可行的,但您会遇到可能使用不同编码的外部文本。通过在程序和外部世界之间的边界进行转换来处理它。

    我个人不明白你为什么要使用C字符串。当然,您应该使用std::wstringstd::string