由于一些要求,我需要通过一个字符串来走走看看,如果字符串中存在任意数量。“的std :: ISDIGIT”崩溃的几个扩展ASCII字符数
当我尝试下面的代码,我的测试过程中,应用程序崩溃。经过仔细的观察,我注意到,输入字符串包含特殊字符(扩展ASCII字符数)..
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string wordstr("tes¶¶"); //
//int num = unsigned char('¶'); // ASCII 182 (DEC)
//int num1 = unsigned char('T'); // ASCII 84 (DEC)
std::find_if(wordstr.begin(), wordstr.end(), ::isdigit) != wordstr.end();
return 0;
}
为什么std::isdigit
是崩溃的扩展的ASCII值? (尝试了很少)。
是否有任何替代标准功能找到如果字符是数字,它惯于崩溃,如果我有我的输入字符串特殊字符?
注:我不应该使用C++ 11以上,由于该代码库的维护问题。
梅萨没有复制! Yousa告诉我们编译器和版本? – user4581301
Visual Studio 2010 C++编译器 – Naidu
有没有想过为什么C程序员将'char'参数转换为'isXXX'为'unsigned'类型? 'isXXX'需要一个'int'参数,一个带符号位的符号字符会被提升为负的'int'.Sounds就像你的'isXXX'函数那样使用一个简单的表格查找,它在负索引下表现不佳。 – WhozCraig