Analizar una secuencia de cadenas separadas por comas en C++

Jinku Hu 12 octubre 2023
  1. Utilice las funciones std::string::find y std::string::erase para analizar secuencias de cadenas separadas por comas en C++
  2. Utilice la función std::getline para analizar la secuencia de cadenas separadas por comas
Analizar una secuencia de cadenas separadas por comas en C++

Este artículo mostrará varios métodos sobre cómo analizar una secuencia de cadenas separadas por comas en C++.

Utilice las funciones std::string::find y std::string::erase para analizar secuencias de cadenas separadas por comas en C++

El método std::find es una función incorporada de la clase std::string y se puede utilizar para encontrar la posición de la subcadena dada. En este caso, se necesita un solo argumento que denota la subcadena que se va a encontrar. Cualquier variable de cadena de varios caracteres se puede inicializar para pasarla como argumento. Aunque, en el siguiente ejemplo, declaramos una sola coma que contiene cadena. Dado que el método find devuelve la posición de la subcadena y string::npos cuando no se encuentra la subcadena, podemos poner la expresión de comparación en un bucle while que se ejecutará hasta que la expresión se evalúe como verdadera.

También almacenamos la cadena analizada en cada iteración en el contenedor vector. Luego, se llama al método erase para eliminar los caracteres antes e incluyendo el primer delimitador de coma encontrado para continuar procesando el mismo objeto string en la siguiente iteración. Finalmente, enviamos los elementos almacenados en el vector al flujo cout.

#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::stringstream;
using std::vector;

int main() {
  string text = "1,2,3,4,5,6,7,8,9,10";
  string delimiter = ",";
  vector<string> words{};

  size_t pos = 0;
  while ((pos = text.find(delimiter)) != string::npos) {
    words.push_back(text.substr(0, pos));
    text.erase(0, pos + delimiter.length());
  }
  for (const auto &str : words) {
    cout << str << endl;
  }

  return EXIT_SUCCESS;
}

Producción :

1
2
3
4
5
6
7
8
9

Utilice la función std::getline para analizar la secuencia de cadenas separadas por comas

La solución anterior no extrae el último número de la secuencia separada por comas. Por lo tanto, podría ser mejor usar el siguiente método usando la función std::getline en lugar de agregar una verificación condicional en el ejemplo de código anterior. getline lee caracteres del flujo de entrada dado y los almacena en un objeto string. La función también toma un tercer argumento opcional para especificar el delimitador por el cual dividir la cadena de entrada. También almacenamos las cadenas extraídas en el contenedor std::vector en cada iteración para su uso posterior.

#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::stringstream;
using std::vector;

int main() {
  string text = "1,2,3,4,5,6,7,8,9,10";
  char delimiter = ',';
  vector<string> words{};

  stringstream sstream(text);
  string word;
  while (std::getline(sstream, word, delimiter)) {
    words.push_back(word);
  }

  for (const auto &str : words) {
    cout << str << endl;
  }

  return EXIT_SUCCESS;
}

Producción :

1
2
3
4
5
6
7
8
9
10
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