由于某些要求,我需要遍历字符串以查看字符串中是否存在任何数字。
当我尝试下面的代码时,在测试期间,应用程序崩溃了。经过仔细观察,我发现输入字符串具有特殊字符(扩展的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;
}
Run Code Online (Sandbox Code Playgroud)
为什么std::isdigit
扩展的ASCII值崩溃?(尝试很少)。
是否有其他可选的标准函数来查找字符是否为数字,如果我的输入字符串中包含特殊字符,这不会崩溃?
注意:由于此代码库的维护问题,我不应该使用C ++ 11及更高版本。
该<ctype.h>
分类功能名义上接受的int
,但输入的值必须可以表示为一个unsigned char
或者是特殊值EOF
。所有其他输入导致未定义的行为。C11§7.4p1:
在所有情况下,参数均为an
int
,其值应表示为anunsigned char
或等于宏的值EOF
。如果参数具有任何其他值,则行为是未定义的。
C ++继承了此限制。解决方案是在将任何普通char
参数传递给unsigned char
(not unsigned
!)之前::isdigit
,或在中使用C ++语言环境感知的重载<locale>
。
归档时间: |
|
查看次数: |
328 次 |
最近记录: |