整个字符串需要由整数组成,我们知道的是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答案 0 :(得分:1)
据推测,问题是text
实际上是LPCWSTR
const wchar_t*
。我们必须从你提出的问题标题和演员表中推断出这个事实。
现在,该演员阵容是一个问题。编译器反对您传递text
。它说text
不是const char*
。通过强制转换你没有改变text
是什么,你只是骗了编译器。并且编译器报了仇。
接下来发生的事情是将宽字符缓冲区重新解释为窄8位缓冲区。如果你的宽字符缓冲区有拉丁文本,编码为UTF-16,那么每隔一个字节将为零。因此,重新解释转换会导致isNumeric
认为字符串只有1个字符长。
您需要做的是:
wchar_t
中使用UTF-16编码的isNumeric
缓冲区。isNumeric
之前从UTF-16转换为ANSI。你应该仔细考虑这一点。看来目前你的程序中有一个非常不合理的ANSI和UTF-16混合。你真的应该选择一个标准字符编码,始终如一地使用它。这对您的程序来说是可行的,但您会遇到可能使用不同编码的外部文本。通过在程序和外部世界之间的边界进行转换来处理它。
我个人不明白你为什么要使用C字符串。当然,您应该使用std::wstring
或std::string
。