Comment convertir une chaîne de caractères en Int en C++
-
Utilisez la méthode
std::stoi
pour convertir une chaîne de caractères en Int en C++ -
Utilisez la méthode
std::from_chars
pour convertir une chaîne de caractères en Int en C++
Cet article présente plusieurs méthodes pour convertir une chaîne
en int
en C++.
Utilisez la méthode std::stoi
pour convertir une chaîne de caractères en Int en C++
La méthode “stoï” est une fonction intégrée de conteneur de chaîne pour la conversion en un entier signé. La méthode prend un paramètre obligatoire du type chaîne
pour fonctionner. On peut aussi passer des paramètres optionnels comme la position de départ dans la chaîne et la base de nombres. L’exemple de code suivant montre plusieurs scénarios de saisie de chaîne
et les cas d’utilisation correspondants de “stoï”.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl using std::string;
using std::stoi;
int main() {
string s1 = "123";
string s2 = "-123";
string s3 = "123xyz";
string s4 = "-123xyz";
string s5 = "7B";
string s6 = "-7B";
string s7 = "1111011";
string s8 = "-1111011";
int num1, num2, num3, num4, num5, num6, num7, num8;
num1 = stoi(s1);
num2 = stoi(s2);
num3 = stoi(s3);
num4 = stoi(s4);
num5 = stoi(s5, nullptr, 16);
num6 = stoi(s6, nullptr, 16);
num7 = stoi(s7, nullptr, 2);
num8 = stoi(s8, nullptr, 2);
cout << "num1: " << num1 << " | num2: " << num2 << endl;
cout << "num3: " << num3 << " | num4: " << num4 << endl;
cout << "num5: " << num5 << " | num6: " << num6 << endl;
cout << "num7: " << num7 << " | num8: " << num8 << endl;
return EXIT_SUCCESS;
}
Production:
num1: 123 | num2: -123
num3: 123 | num4: -123
num5: 123 | num6: -123
num7: 123 | num8: -123
Remarquez que stoi
peut gérer les espaces, les signes +/-
, les préfixes hexadécimaux (0x
ou 0X
), même les zéros multiples et retourner l’entier correctement. Il ne peut pas gérer d’autres caractères avant les chiffres, et s’il en trouve un, l’exception std::invalid_argument
est lancée. Vous pouvez voir le comportement avec l’exemple de code suivant:
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl using std::string;
using std::stoi;
int main() {
string s1 = " 123";
;
string s2 = "xyz123";
;
int num1, num2;
num1 = stoi(s1);
cout << "num1: " << num1 << endl;
try {
num2 = stoi(s2);
cout << "num2: " << num2 << endl;
} catch (std::exception& e) {
cout << e.what() << " caused the error!!!\n";
}
return EXIT_SUCCESS;
}
Production:
num1: 123
stoi caused the error!!!
Il existe plusieurs méthodes de style stoi
pour convertir en différents types de nombres comme : std::stoi, std::stol, std::stoll
, std::stoul, std::stoull
, std::stof, std::stod, std::stold
qui peuvent être utilisées pour implémenter des fonctionnalités spécifiques selon les besoins.
Utilisez la méthode std::from_chars
pour convertir une chaîne de caractères en Int en C++
La méthode from_chars
est un ajout C++17 à la bibliothèque utilities
, définie dans le fichier d’en-tête <charconv>
. Elle peut analyser des séquences de caractères avec des motifs spécifiés. L’avantage de cette méthode est un temps de traitement beaucoup plus rapide et une meilleure gestion des exceptions dans les cas d’analyse ratée. Bien qu’il y ait certaines restrictions sur la chaîne de caractères d’entrée, à savoir : les espaces de tête/autres caractères, même les préfixes de base 16 0x
/0X
ne peuvent pas être traités. Seul le signe moins en tête est reconnu pour les entiers signés.
Syntaxe de std::from_chars
(en anglais)
from_chars(const char* first, const char* last, TYPE& value, int base = 10)
Paramètre | Description |
---|---|
[first, last) |
plage d’adresses de caractères à analyser |
value |
la variable du résultat de l’analyse syntaxique en cas de succès |
base |
base “in”. La valeur par défaut est 10 . |
#include <charconv>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl using std::string;
using std::from_chars;
using std::stoi;
int main() {
string s1 = "123";
string s2 = "-123";
string s3 = "123xyz";
string s4 = "-123xyz";
string s5 = "7B";
string s6 = "-7B";
string s7 = "1111011";
string s8 = "-1111011";
string s9 = " 123";
string s10 = "x123";
int num1, num2, num3, num4, num5, num6, num7, num8, num9, num10;
from_chars(s1.c_str(), s1.c_str() + s1.length(), num1);
from_chars(s2.c_str(), s2.c_str() + s2.length(), num2);
from_chars(s3.c_str(), s3.c_str() + s3.length(), num3);
from_chars(s4.c_str(), s4.c_str() + s4.length(), num4);
from_chars(s5.c_str(), s5.c_str() + s5.length(), num5, 16);
from_chars(s6.c_str(), s6.c_str() + s6.length(), num6, 16);
from_chars(s7.c_str(), s7.c_str() + s7.length(), num7, 2);
from_chars(s8.c_str(), s8.c_str() + s8.length(), num8, 2);
from_chars(s9.c_str(), s9.c_str() + s9.length(), num9);
from_chars(s10.c_str(), s10.c_str() + s10.length(), num10);
cout << "num1: " << num1 << " | num2: " << num2 << endl;
cout << "num3: " << num3 << " | num4: " << num4 << endl;
cout << "num5: " << num5 << " | num6: " << num6 << endl;
cout << "num7: " << num7 << " | num8: " << num8 << endl;
cout << "num9: " << num9 << " | num10: " << num10 << endl;
return EXIT_SUCCESS;
}
Production:
num1: 123 | num2: -123
num3: 123 | num4: -123
num5: 123 | num6: -123
num7: 123 | num8: -123
num9: -16777216 | num10: -1 // incorrect values varying over runs
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn FacebookArticle connexe - C++ String
- Comparaison de chaîne et de caractère en C++
- Supprimer le dernier caractère d'une chaîne en C++
- Obtenir le dernier caractère d'une chaîne en C++
- Différences entre l'opérateur sizeof et la fonction strlen pour les chaînes en C++
- Effacer la chaîne en C++
- Imprimer toutes les permutations de la chaîne en C++
Article connexe - C++ Integer
- Comparaison entre les expressions entières signées et non signées en C++
- Compter le nombre de chiffres dans un nombre en C++
- Expressions de macro INT_MAX et INT_MIN en C++
- Vérifier si un nombre est premier en C++
- Vérifiez si l'entrée est un entier en C++
- Comment analyser une chaîne de caractères en C++