web-dev-qa-db-fra.com

Comment convertir une chaîne C ++ en int?

Duplicata possible:
Comment analyser une chaîne en un int en C++?

Comment convertir une chaîne C++ en int?

Supposons que vous vous attendiez à ce que la chaîne contienne des nombres réels ("1", "345", "38944", par exemple).

Supposons également que vous n'ayez pas de boost, et que vous vouliez vraiment le faire à la manière C++, pas à l'ancienne manière C cruelle.

46
krupan
#include <sstream>

// st is input string
int result;
stringstream(st) >> result;
74

Utilisez les flux C++.

std::string       plop("123");
std::stringstream str(plop);
int x;

str >> x;

/* Lets not forget to error checking */
if (!str)
{
     // The conversion failed.
     // Need to do something here.
     // Maybe throw an exception
}

PS. Ce principe de base est de savoir comment la bibliothèque boost lexical_cast<> travaux.

Ma méthode préférée est le boost lexical_cast<>

#include <boost/lexical_cast.hpp>

int x = boost::lexical_cast<int>("123");

Il fournit une méthode pour convertir entre une chaîne et des formats numériques et inversement. En dessous, il utilise un flux de chaîne, donc tout ce qui peut être marshalé dans un flux puis décompressé d'un flux (jetez un œil aux opérateurs >> et <<).

33
Martin York

C++ FAQ Lite

[39.2] Comment convertir une chaîne std :: en nombre?

https://isocpp.org/wiki/faq/misc-technical-issues#convert-string-to-num

4

J'ai déjà utilisé quelque chose comme ce qui suit dans le code C++:

#include <sstream>
int main()
{
    char* str = "1234";
    std::stringstream s_str( str );
    int i;
    s_str >> i;
}
4
ayaz

Permettez-moi d'ajouter mon vote pour boost :: lexical_cast

#include <boost/lexical_cast.hpp>

int val = boost::lexical_cast<int>(strval) ;

Il jette bad_lexical_cast en cas d'erreur.

2
Ryan Ginstrom

Peut-être que je comprends mal la question, pourquoi exactement ne voudriez-vous pas utiliser atoi? Je ne vois aucun intérêt à réinventer la roue.

Suis-je juste en train de rater le point ici?

0
user12576

Utilisez atoi

0
Ramesh Soni