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

How to tell if LPCWSTR text is numeric?

本文关键字:文本 是否 数字 LPCWSTR 何判断 判断      更新时间:2023-10-16

整个字符串需要由整数组成,我们知道这些整数是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

问题可能是text实际上是LPCWSTR,也就是const wchar_t*。我们必须从问题标题和你制作的演员阵容中推断出这个事实。

现在,演员阵容是个问题。编译器反对您传递text。它说text不是const char*。通过强制转换,您没有改变text是什么,您只是对编译器撒谎。编译器进行了报复。

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

你需要做的是:

  1. isNumeric中开始使用UTF-16编码的wchar_t缓冲区
  2. 在调用isNumeric之前,将UTF-16转换为ANSI

你应该仔细考虑这个问题。目前看来,在您的程序中,ANSI和UTF-16的混合非常不规范。你真的应该确定一个标准的字符编码,并始终使用它。这在程序内部是可行的,但您会遇到可能使用不同编码的外部文本。通过在你的程序和外部世界之间的边界转换来处理这个问题。

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

相关文章: