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

  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

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 <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>

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

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 <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>

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

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

Artículo relacionado - C++ String

  • Cómo analizar una cadena usando un delimitador en C++