如何判断LPCWSTR文本是否为数字
How to tell if LPCWSTR text is numeric?
整个字符串需要由整数组成,我们知道这些整数是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));
即使字符串
问题可能是text
实际上是LPCWSTR
,也就是const wchar_t*
。我们必须从问题标题和你制作的演员阵容中推断出这个事实。
现在,演员阵容是个问题。编译器反对您传递text
。它说text
不是const char*
。通过强制转换,您没有改变text
是什么,您只是对编译器撒谎。编译器进行了报复。
接下来要做的是将宽char缓冲区重新解释为窄8位缓冲区。如果你的宽字符缓冲区有拉丁文本,编码为UTF-16,那么每隔一个字节就会为零。因此,您所做的重新解释强制转换会导致isNumeric
认为字符串只有1个字符长。
你需要做的是:
- 在
isNumeric
中开始使用UTF-16编码的wchar_t
缓冲区 - 在调用
isNumeric
之前,将UTF-16转换为ANSI
你应该仔细考虑这个问题。目前看来,在您的程序中,ANSI和UTF-16的混合非常不规范。你真的应该确定一个标准的字符编码,并始终使用它。这在程序内部是可行的,但您会遇到可能使用不同编码的外部文本。通过在你的程序和外部世界之间的边界转换来处理这个问题。
就我个人而言,我完全不明白你为什么要使用C字符串。当然,您应该使用std::wstring
或std::string
。
相关文章:
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- 是否可以在文本文件中找到最长单词的长度,并在同一个文本文件中读取,只需 1 个 while 循环?
- 返回从字符串文本创建的静态string_view是否安全?
- 是否保证相同内容字符串文本的存储相同?
- 是否可以创建一个用户定义的文本,将字符串文本转换为 own 类型的数组?
- 是否可以在原始字符串文本中插入转义序列?
- 如何知道文本文件中的输入是否是 C++ 中的有效数字
- 如何检查字符串格式在读取C++文本文件时是否有效?
- 是否可以在运行时调用用于选择要调用的用户定义文本的逻辑?
- 在现代C++中是否可以将字符串文本作为参数传递给C++模板?
- 标准是否阻止在可变参数模板中使用足够小的文本值缩小文本转换范围
- 是否可以在多行字符串文本中使用 C/C++ 预处理器令牌
- 是否有提供可调整 dpi、可选文本和 CSS 支持的 HTML 到 PDF 渲染器?
- C++是否可以将宏重写浮点文本为双文本或至少删除 f 后缀?
- 从文本文件读取时,如何知道是否已到达新行?
- (Qt)如何检查 QTextEdit 小部件文本是否已从 QTabWidget 更改
- Qt - 如何测试 QTableWidget 项的文本是否为整数
- 以十进制、八进制和十六进制表示法标识整数文本是否与转义字符中的整数文本相同
- 如何判断LPCWSTR文本是否为数字
- 如何确定CRichEditCtrl中所选文本是否具有多种字体大小