7
votes

Convertir la chaîne en Integer en C ++

bonjour Je sais que cela a été posé plusieurs fois mais je n'avais pas trouvé de réponse à ma question spécifique.

Je veux convertir seulement une chaîne contenant uniquement des nombres décimaux:

Par exemple 256 est ok mais 256a n'est pas.

pourrait-il être fait sans vérifier la chaîne?

merci


2 commentaires

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?


3 Réponses :


14
votes

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');


1 commentaires

Je ne suis pas un fan de ATOI 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



7
votes

en forme C ++, utilisez stringstream : xxx


2 commentaires

Mais que si la chaîne n'est pas un entier? Quelle sera la valeur de A ?


@ Jean-Françoisefabre: Vous pouvez vérifier la condition de flux en vérifiant l'état renvoyé par sstr.rdstate () ou en vérifiant les valeurs d'état individuelles. J'ai mis à jour ma réponse avec ce dernier choix.



6
votes

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;
    }

}


1 commentaires

Échoue pour "0", "0001", "-5".