Convertir une chaîne en tableau int en C++
-
Utilisez les fonctions
std::getline
etstd::stoi
pour convertir un tableaustring
en tableauint
en C++ -
Utilisez les fonctions
std::string::find
etstd::stoi
pour convertir le tableaustring
en tableauint
en C++ -
Utilisez les fonctions
std::copy
etstd::remove_if
pour convertir le tableaustring
en tableauint
en C++
Cet article présente plusieurs méthodes sur la façon de convertir une chaîne en tableau int en C++.
Utilisez les fonctions std::getline
et std::stoi
pour convertir un tableau string
en tableau int
en C++
std::stoi
est utilisé pour convertir les valeurs de chaîne en un entier signé, et il prend un argument obligatoire de type std::string
. En option, la fonction peut prendre 2 arguments supplémentaires, dont le premier peut être utilisé pour stocker l’index du dernier caractère non converti. Le troisième argument peut éventuellement spécifier la base numérique de l’entrée. Notez que nous supposons que les nombres séparés par des virgules sont la chaîne d’entrée comme le fichier .csv
. Ainsi, nous utilisons la fonction getline
pour analyser chaque nombre et ensuite passer la valeur au stoi
. Nous stockons également chaque nombre dans le conteneur std::vector
en appelant la méthode push_back
à chaque itération.
#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::stoi;
using std::string;
using std::stringstream;
using std::vector;
int main(int argc, char *argv[]) {
string text = "125, 44, 24, 5543, 111";
vector<int> numbers;
int num;
stringstream text_stream(text);
string item;
while (std::getline(text_stream, item, ',')) {
numbers.push_back(stoi(item));
}
for (auto &n : numbers) {
cout << n << endl;
}
exit(EXIT_SUCCESS);
}
Production:
125
44
24
5543
111
Utilisez les fonctions std::string::find
et std::stoi
pour convertir le tableau string
en tableau int
en C++
Alternativement, nous pouvons utiliser une méthode intégrée find
de la classe std::string
pour récupérer la position du séparateur virgule puis appeler la fonction substr
pour obtenir le nombre. Ensuite, le résultat substr
est passé au stoi
qui lui-même est enchaîné à la méthode push_back
pour stocker le nombre dans le vector
. Notez qu’il y a la ligne après la boucle while
qui est nécessaire pour extraire le dernier nombre de la séquence.
#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::stoi;
using std::string;
using std::stringstream;
using std::vector;
int main(int argc, char *argv[]) {
string text = "125, 44, 24, 5543, 111";
vector<int> numbers;
size_t pos = 0;
while ((pos = text.find(',')) != string::npos) {
numbers.push_back(stoi(text.substr(0, pos)));
text.erase(0, pos + 1);
}
numbers.push_back(stoi(text.substr(0, pos)));
for (auto &n : numbers) {
cout << n << endl;
}
exit(EXIT_SUCCESS);
}
Production:
125
44
24
5543
111
Utilisez les fonctions std::copy
et std::remove_if
pour convertir le tableau string
en tableau int
en C++
Une autre méthode pour extraire des entiers est d’utiliser l’algorithme std::copy
en conjonction avec std::istream_iterator
et std::back_inserter
. Cette solution stocke les valeurs de chaîne dans un vector
et les sort dans le flux cout
, mais on peut facilement ajouter la fonction std::stoi
pour convertir chaque élément en valeur int
. Notez cependant que l’exemple de code suivant ne stocke que les nombres sous forme de valeurs de chaîne.
#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::stoi;
using std::string;
using std::stringstream;
using std::vector;
int main(int argc, char *argv[]) {
string text = "125, 44, 24, 5543, 111";
vector<string> nums;
std::istringstream iss(text);
copy(std::istream_iterator<string>(iss), std::istream_iterator<string>(),
std::back_inserter(nums));
for (auto &n : nums) {
n.erase(std::remove_if(n.begin(), n.end(), ispunct), n.end());
cout << n << endl;
}
exit(EXIT_SUCCESS);
}
Production:
125
44
24
5543
111
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++