C++ 如何判断LPCWSTR文本是否为数字?
整个字符串需要由整数组成,如我们所知,它们是0123456789。我正在尝试使用以下函数,但它似乎不起作用C++ 如何判断LPCWSTR文本是否为数字?,c++,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()) ==
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\u t*
。我们必须从题目和你的演员阵容中推断出这个事实
现在,演员阵容是个问题。编译器反对您传递文本
。它说text
不是const char*
。通过强制转换,您没有更改文本
的内容,您只是对编译器撒了谎。于是,编辑者进行了报复
接下来要做的是将宽字符缓冲区重新解释为窄8位缓冲区。如果您的宽字符缓冲区具有拉丁文本,编码为UTF-16,则每隔一个字节将为零。因此,您所做的重新解释转换会导致isNumeric
认为字符串只有1个字符长
您需要做的是:
isNumeric
中开始使用UTF-16编码的wchar\u t
缓冲区isNumeric
之前,将UTF-16转换为ANSI就我个人而言,我完全不明白为什么要使用C字符串。当然,您应该使用
std::wstring
或std::string
什么是test
,为什么要将其强制转换为char*
?您可以使用来检查这一点。nNumberBase
是一个相当误导性的名称。在我看来,你并不是在使用基数为11的数字。@Joachim Pileborg谢谢!这使我找到了解决方案我回滚了编辑。如果你想回答你自己的问题,你可以这样做。你的回答让我头疼,但很高兴知道会发生什么。经过思考,我的项目最好的方法是2。在调用isNumeric之前,将UTF-16转换为ANSI。你能用代码写下你将如何做到这一点吗?