Convertir String en Int Array en C++

Jinku Hu 12 octubre 2023
  1. Utilice las funciones std::getline y std::stoi para convertir string en un array int en C++
  2. Utilice las funciones std::string::find y std::stoi para convertir string en un array int en C++
  3. Utilice las funciones std::copy y std::remove_if para convertir string en un array int en C++
Convertir String en Int Array en C++

Este artículo demostrará varios métodos sobre cómo convertir cadenas a matrices int en C++.

Utilice las funciones std::getline y std::stoi para convertir string en un array int en C++

std::stoi se usa para convertir valores de cadena en un entero con signo, y toma un argumento obligatorio de tipo std::string. Opcionalmente, la función puede tomar 2 argumentos adicionales, el primero de los cuales se puede usar para almacenar el índice del último carácter no convertido. El tercer argumento puede especificar opcionalmente la base numérica de la entrada. Tenga en cuenta que asumimos los números separados por comas como la cadena de entrada como el archivo .csv. Por lo tanto, usamos la función getline para analizar cada número y luego pasar el valor al stoi. También almacenamos cada número en el contenedor std::vector llamando al método push_back en cada iteración.

#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);
}

Producción :

125
44
24
5543
111

Utilice las funciones std::string::find y std::stoi para convertir string en un array int en C++

Alternativamente, podemos utilizar un método incorporado find de la clase std::string para recuperar la posición del delimitador de coma y luego llamar a la función substr para obtener el número. Luego, el resultado substr se pasa al stoi, que a su vez está encadenado al método push_back para almacenar el número en el vector. Tenga en cuenta que está la línea después del bucle while que es necesaria para extraer el último número de la secuencia.

#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);
}

Producción :

125
44
24
5543
111

Utilice las funciones std::copy y std::remove_if para convertir string en un array int en C++

Otro método para extraer enteros es usar el algoritmo std::copy junto con std::istream_iterator y std::back_inserter. Esta solución almacena los valores de la cadena en un vector y los envía al flujo cout, pero se puede agregar fácilmente la función std::stoi para convertir cada elemento en un valor int. Sin embargo, tenga en cuenta que el siguiente código de ejemplo solo almacena los números como valores de cadena.

#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);
}

Producción :

125
44
24
5543
111
Autor: 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

Artículo relacionado - C++ String