É 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:
- 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;
}
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>
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;
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í!