En raison de certaines exigences, je dois parcourir une chaîne pour voir si un nombre existe dans la chaîne."std :: isdigit" plante quelques caractères ASCII étendus
Quand je tentais le code ci-dessous, lors de mes tests, l'application .. Après écrasements une observation attentive, je remarque que la chaîne d'entrée contient des caractères spéciaux (étendu Chars 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;
}
Pourquoi est std::isdigit
écraser pour les valeurs ASCII étendues? (essayé avec peu).
Existe-t-il une autre fonction standard pour trouver si le caractère est numérique, ce qui ne va pas se bloquer si j'ai des caractères spéciaux dans ma chaîne d'entrée?
note: Je ne suis pas censé utiliser C++ 11 et plus, en raison de problèmes de maintenance de cette base de code.
Mesa non répliqué! Yousa nous dit compilateur et version? – user4581301
Visual Studio 2010 C++ complier – Naidu
Vous êtes-vous déjà demandé pourquoi les programmeurs C transtissaient le paramètre 'char' en' isXXX' en un type 'unsigned'? 'isXXX' nécessite un argument' int', et un char signé avec le bit de signe allumé va promouvoir un 'int' négatif. Des choses comme vos fonctions' isXXX' utilisent une simple recherche tabulaire qui ne joue pas bien avec les index négatifs. – WhozCraig