Comment analyser une chaîne de caractères en C++
-
Utilisez la fonction
std::stoi
pour analyser uneint
à partir d’une chaîne de caractères -
Utilisez la fonction
std::from_chars
pour analyser la chaîne de caractères Int From String
Cet article explique plusieurs méthodes d’analyse d’un int
à partir de la string
en C++.
Utilisez la fonction std::stoi
pour analyser une int
à partir d’une chaîne de caractères
La fonction stoi
fait partie de la bibliothèque de chaînes de caractères définie dans l’en-tête string
, et elle peut être utilisée pour convertir les valeurs des chaînes de caractères en différents types numériques. Les fonctions std::stoi
, std::stol
et std::stoll
sont utilisées pour la conversion d’entiers signés. La fonction stoi
prend un seul objet string
comme argument obligatoire, mais le programmeur peut aussi spécifier l’adresse pour stocker l’entier et la base de nombres dans laquelle la chaîne d’entrée doit être traitée.
L’exemple suivant montre plusieurs cas d’utilisation de la fonction stoi
. Notez que la fonction stoi
peut gérer les espaces blancs de tête dans la chaîne, mais tout autre caractère provoquera une exception std::invalid_argument
.
#include <charconv>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::stoi;
using std::string;
int main() {
string s1 = "333";
string s2 = "-333";
string s3 = "333xio";
string s4 = "01011101";
string s5 = " 333";
string s6 = "0x33";
int num1, num2, num3, num4, num5, num6;
num1 = stoi(s1);
num2 = stoi(s2);
num3 = stoi(s3);
num4 = stoi(s4, nullptr, 2);
num5 = stoi(s5);
num6 = stoi(s6, nullptr, 16);
cout << "num1: " << num1 << " | num2: " << num2 << endl;
cout << "num3: " << num3 << " | num4: " << num4 << endl;
cout << "num5: " << num5 << " | num6: " << num6 << endl;
return EXIT_SUCCESS;
}
Production :
num1: 333 | num2: -333
num3: 333 | num4: 93
num5: 333 | num6: 51
Utilisez la fonction std::from_chars
pour analyser la chaîne de caractères Int From String
Comme alternative, la fonction from_chars
de la bibliothèque d’utilitaires peut analyser les valeurs int
. Elle fait partie de la bibliothèque standard depuis la version C++17 et est définie dans le fichier d’en-tête <charconv>
.
Très différente de la fonction stoi
, from_chars
opère sur les plages de caractères, sans tenir compte de la longueur et des limites de l’objet. Ainsi, le programmeur doit spécifier le début et la fin de la plage comme étant les deux premiers arguments. Le troisième argument est la variable int
à laquelle la valeur convertie sera assignée.
Attention cependant, from_chars
ne peut gérer que le signe -
de tête dans la chaîne de caractères d’entrée ; c’est pourquoi il imprime les valeurs de num5
et num6
dans l’exemple suivant.
#include <charconv>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::from_chars;
using std::stoi;
using std::string;
int main() {
string s1 = "333";
string s2 = "-333";
string s3 = "333xio";
string s4 = "01011101";
string s5 = " 333";
string s6 = "0x33";
int num1, num2, num3, num4, num5, num6;
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, 2);
from_chars(s5.c_str(), s5.c_str() + s5.length(), num5);
from_chars(s6.c_str(), s6.c_str() + s6.length(), num6);
cout << "num1: " << num1 << " | num2: " << num2 << endl;
cout << "num3: " << num3 << " | num4: " << num4 << endl;
cout << "num5: " << num5 << " | num6: " << num6 << endl;
return EXIT_SUCCESS;
}
Production :
num1: 333 | num2: -333
num3: 333 | num4: 93
num5: -1858679306 | num6: 0
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 Facebook