Mise à jour pour C ++ 11
À partir de la C++11
norme, la conversion chaîne en nombre et vice-versa est intégrée à la bibliothèque standard. Toutes les fonctions suivantes sont présentes dans <string>
(conformément au paragraphe 21.5).
chaîne en numérique
float stof(const string& str, size_t *idx = 0);
double stod(const string& str, size_t *idx = 0);
long double stold(const string& str, size_t *idx = 0);
int stoi(const string& str, size_t *idx = 0, int base = 10);
long stol(const string& str, size_t *idx = 0, int base = 10);
unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);
long long stoll(const string& str, size_t *idx = 0, int base = 10);
unsigned long long stoull(const string& str, size_t *idx = 0, int base = 10);
Chacun de ceux-ci prend une chaîne en entrée et essaiera de la convertir en nombre. Si aucun nombre valide n'a pu être construit, par exemple parce qu'il n'y a pas de données numériques ou parce que le nombre est hors limites pour le type, une exception est levée ( std::invalid_argument
ou std::out_of_range
).
Si la conversion a réussi et idx
ne l'est pas 0
,idx
contiendra l'index du premier caractère qui n'a pas été utilisé pour le décodage. Cela peut être un index derrière le dernier caractère.
Enfin, les types intégraux permettent de spécifier une base, pour les chiffres supérieurs à 9, l'alphabet est supposé ( a=10
jusqu'à z=35
). Vous pouvez trouver plus d'informations sur la mise en forme exacte qui peut être analysée ici pour les nombres à virgule flottante , les entiers signés et les entiers non signés .
Enfin, pour chaque fonction, il existe également une surcharge qui accepte un std::wstring
comme premier paramètre.
numérique en chaîne
string to_string(int val);
string to_string(unsigned val);
string to_string(long val);
string to_string(unsigned long val);
string to_string(long long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string(long double val);
Ceux-ci sont plus simples, vous passez le type numérique approprié et vous récupérez une chaîne. Pour les options de formatage, vous devez revenir à l'option stringsream C ++ 03 et utiliser des manipulateurs de flux, comme expliqué dans une autre réponse ici.
Comme indiqué dans les commentaires, ces fonctions reviennent à une précision de mantisse par défaut qui n'est probablement pas la précision maximale. Si plus de précision est requise pour votre application, il est également préférable de revenir à d'autres procédures de formatage de chaîne.
Il existe également des fonctions similaires définies qui sont nommées to_wstring
, elles renverront un fichier std::wstring
.