Split de String em C++
Dica publicada em C/C++ / Miscelânea
Split de String em C++
É um assunto complicado quando se trata de strings em C++, porque as opções de tratamento de string são limitadas perto de outras linguagens de programação, como por exemplo Java, PHP, Python etc.
Então, hoje, eu vou ensinar aqui como fazer split de strings de um modo muito fácil.
Para quem não sabe o "split" é dividir uma string em várias outras strings a partir de um delimitador comum. Por exemplo, vamos fazer o split dessa string:
eu,adoro,o,howto,linux
O delimitador dessa string é a vírgula (,) e essa string repartida ficaria assim:
Agora chegou a hora de fazermos o split das strings, para isso precisamos utilizar uma biblioteca chamada Boost.
Podemos instalá-la via apt-get ou yum:
# apt-get install libboost-dev -y
Ou:
# yum install boost-devel -y
Agora, vamos escrever o nosso programa. Segue abaixo o código completo e posteriormente, a explicação do código:
A princípio, devemos incluir essas bibliotecas:
A função que vamos utilizar da biblioteca Boost é a split(). Vejamos agora no exemplo abaixo como utilizá-la:
A utilização do "namespace" é muito importante, pois senão, devemos colocar sempre o "boost::" antes de utilizarmos as funções da Lib Boost:
Declaremos agora a variável que guardará a string a ser repartida. A função split() nos retorna uma variável do tipo vector, então também vamos declarar uma variável para receber o retorno da função:
A split() recebe 3 parâmetros:
Para passarmos o delimitador devemos usar uma outra função do Boost, chamada "is_any_of()":
Agora vamos imprimir a primeira posição do vetor!
Devemos ter uma saída como essa:
Para compilarmos esse programa devemos passar mais dois parâmetros para o compilador. Servem para compilar junto às bibliotecas do Boost. Segue o comando de compilação:
# g++ -o teste teste.cpp -lboost_system -I /usr/include/boost/algorithm
E com isso, temos uma maneira muito simples de fazer split de string.
Espero que gostem. Qualquer dúvida, postem nos comentários!
Estou aproveitando para divulgar meu blog, essa dica pertence a ele:
Quem tiver sugestões, postem aí!
Então, hoje, eu vou ensinar aqui como fazer split de strings de um modo muito fácil.
Para quem não sabe o "split" é dividir uma string em várias outras strings a partir de um delimitador comum. Por exemplo, vamos fazer o split dessa string:
eu,adoro,o,howto,linux
O delimitador dessa string é a vírgula (,) e essa string repartida ficaria assim:
- eu
- adoro
- o
- howto
- linux
Agora chegou a hora de fazermos o split das strings, para isso precisamos utilizar uma biblioteca chamada Boost.
Podemos instalá-la via apt-get ou yum:
# apt-get install libboost-dev -y
Ou:
# yum install boost-devel -y
Agora, vamos escrever o nosso programa. Segue abaixo o código completo e posteriormente, a explicação do código:
#include <cstdio>
#include <cstdlib>
#include <string>
#include <vector>
#include <boost/algorithm/string.hpp>
int main() {
using namespace boost;
using namespace std;
string minha_string = "testando,a,lib,boost";
ector<string> str_split;
split(str_split,minha_string,is_any_of(","));
printf("Posição 0 do vetor: %s", str_split[0].c_str());
return EXIT_SUCCESS;
}
#include <cstdlib>
#include <string>
#include <vector>
#include <boost/algorithm/string.hpp>
int main() {
using namespace boost;
using namespace std;
string minha_string = "testando,a,lib,boost";
ector<string> str_split;
split(str_split,minha_string,is_any_of(","));
printf("Posição 0 do vetor: %s", str_split[0].c_str());
return EXIT_SUCCESS;
}
A princípio, devemos incluir essas bibliotecas:
#include <cstdio>
#include <cstdlib>
#include <string>
#include <vector>
//Agora inserimos a biblioteca do Boost
#include <boost/algorithm/string.hpp>
#include <cstdlib>
#include <string>
#include <vector>
//Agora inserimos a biblioteca do Boost
#include <boost/algorithm/string.hpp>
A função que vamos utilizar da biblioteca Boost é a split(). Vejamos agora no exemplo abaixo como utilizá-la:
A utilização do "namespace" é muito importante, pois senão, devemos colocar sempre o "boost::" antes de utilizarmos as funções da Lib Boost:
using namespace boost;
Declaremos agora a variável que guardará a string a ser repartida. A função split() nos retorna uma variável do tipo vector, então também vamos declarar uma variável para receber o retorno da função:
string minha_string = "testando,a,lib,boost";
vector str_split;
vector str_split;
A split() recebe 3 parâmetros:
- O primeiro é o vetor que guardará as string;
- O segundo é a string que será repartida;
- O terceiro é o delimitador.
Para passarmos o delimitador devemos usar uma outra função do Boost, chamada "is_any_of()":
split(str_split,minha_string,is_any_of(","));
Agora vamos imprimir a primeira posição do vetor!
printf("Posição 0 do vetor: %s",str_split[0].c_str());
Devemos ter uma saída como essa:
Posição 0 do vetor: testando
Para compilarmos esse programa devemos passar mais dois parâmetros para o compilador. Servem para compilar junto às bibliotecas do Boost. Segue o comando de compilação:
# g++ -o teste teste.cpp -lboost_system -I /usr/include/boost/algorithm
E com isso, temos uma maneira muito simples de fazer split de string.
Espero que gostem. Qualquer dúvida, postem nos comentários!
Estou aproveitando para divulgar meu blog, essa dica pertence a ele:
Quem tiver sugestões, postem aí!
Gostaria de contribuir com algumas dicas/correções:
1. O código apresenta um erro de digitação na declaração de `str_split'
2. Procure explicar com comentários simples, evite reescrever cada trecho pois a leitura fica enfadonha
3. Em C++ é boa prática não usar namespaces, no seu caso não tem problema, mas fica a dica para os iniciantes
4. Em C++ raramente se utiliza printf()
5. A linha de compilação não precisa ser executada pelo usuário root (#)
6. Não precisa apontar para bibliotecas nos diretórios /usr/include, em geral fazem parte do PATH no GCC
Abs.