Analisar uma sequência de strings separadas por vírgulas em C++
-
Use as funções
std::string::find
estd::string::erase
para analisar a sequência de strings separadas por vírgulas em C++ -
Use a função
std::getline
para analisar a sequência de strings separadas por vírgulas
Este artigo demonstrará vários métodos sobre como analisar uma sequência de string separada por vírgulas em C++.
Use as funções std::string::find
e std::string::erase
para analisar a sequência de strings separadas por vírgulas em C++
O método std::find
é uma função embutida da classe std::string
e pode ser utilizado para encontrar a posição de uma determinada substring. É necessário um único argumento neste caso que denota a substring a ser encontrada. Qualquer variável de string de vários caracteres pode ser inicializada para ser passada como um argumento. Embora, no exemplo a seguir, declaremos uma única vírgula contendo string
. Como o método find
retorna a posição da substring e string::npos
quando a substring não é encontrada, podemos colocar a expressão de comparação em um loop while
que será executado até que a expressão seja avaliada como verdadeira.
Também armazenamos a string analisada em cada iteração no contêiner vetor
. Em seguida, o método erase
é chamado para excluir os caracteres anteriores e incluindo o primeiro delimitador de vírgula encontrado para continuar processando o mesmo objeto string
na próxima iteração. Finalmente, enviamos os elementos armazenados no vetor
para o fluxo 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;
}
Resultado:
1
2
3
4
5
6
7
8
9
Use a função std::getline
para analisar a sequência de strings separadas por vírgulas
A solução anterior deixa de extrair o último número da seqüência separada por vírgulas. Portanto, pode ser melhor usar o método a seguir usando a função std::getline
em vez de adicionar uma verificação condicional no exemplo de código anterior. getline
lê caracteres de um determinado fluxo de entrada e os armazena em um objeto string
. A função também leva um terceiro argumento opcional para especificar o delimitador pelo qual dividir a string de entrada. Também armazenamos as strings extraídas no contêiner std::vector
em cada iteração para 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;
}
Resultado:
1
2
3
4
5
6
7
8
9
10
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