Convertir une chaîne en tableau int en C++

Jinku Hu 12 octobre 2023
  1. Utilisez les fonctions std::getline et std::stoi pour convertir un tableau string en tableau int en C++
  2. Utilisez les fonctions std::string::find et std::stoi pour convertir le tableau string en tableau int en C++
  3. Utilisez les fonctions std::copy et std::remove_if pour convertir le tableau string en tableau int en C++
Convertir une chaîne en tableau int 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
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Article connexe - C++ String