Convertir une chaîne en tableau int en C++
-
Utilisez les fonctions
std::getlineetstd::stoipour convertir un tableaustringen tableauinten C++ -
Utilisez les fonctions
std::string::findetstd::stoipour convertir le tableaustringen tableauinten C++ -
Utilisez les fonctions
std::copyetstd::remove_ifpour convertir le tableaustringen tableauinten 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++
