bonjour Je sais que cela a été posé plusieurs fois mais je n'avais pas trouvé de réponse à ma question spécifique. P>
Je veux convertir seulement une chaîne contenant uniquement des nombres décimaux: p>
Par exemple 256 est ok mais 256a n'est pas. P>
pourrait-il être fait sans vérifier la chaîne? p>
merci p>
3 Réponses :
La manière la plus simple qui rend la vérification des erreurs facultatives que je peux penser est la suivante:
char *endptr; int x = strtol(str, &endptr, 0); int error = (*endptr != '\0');
Je ne suis pas un fan de ATOI code> car il ne fournit aucun moyen de dire la différence entre une chaîne complètement non valide et une chaîne qui est valide et convertit vers
0 code>
en forme C ++, utilisez stringstream code>:
Mais que si la chaîne n'est pas un entier? Quelle sera la valeur de A code>?
@ Jean-Françoisefabre: Vous pouvez vérifier la condition de flux en vérifiant l'état renvoyé par sstr.rdstate () code> ou en vérifiant les valeurs d'état individuelles. J'ai mis à jour ma réponse avec ce dernier choix.
Une autre solution en utilisant le style C ++: Nous vérifions le nombre de chiffres pour savoir si la chaîne était valide ou non:
#include <iostream> #include <sstream> #include <string> #include <cmath> int main(int argc,char* argv[]) { std::string a("256"); std::istringstream buffer(a); int number; buffer >> number; // OK conversion is done ! // Let's now check if the string was valid ! // Quick way to compute number of digits size_t num_of_digits = (size_t)floor( log10( abs( number ) ) ) + 1; if (num_of_digits!=a.length()) { std::cout << "Not a valid string !" << std::endl; } else { std::cout << "Valid conversion to " << number << std::endl; } }
Échoue pour "0", "0001", "-5".
Votre ligne de sujet dit "Convertir Enger en chaîne", mais votre question semble impliquer une conversion à chaîne à int-in int ... Qu'est-ce que vous essayez de faire ?!
Ce message est vague et a besoin de plus de ponctuation. Pourriez-vous expliquer ce que vous entendez avec un exemple?