由於一些要求,我需要通過一個字符串來走走看看,如果字符串中存在任意數量。「的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