Split de String em C++

Publicado por Vitor Luis em 15/02/2013

[ Hits: 47.947 ]

Blog: http://howtolinux.com.br/

 


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:
  1. eu
  2. adoro
  3. o
  4. howto
  5. 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:
  1. O primeiro é o vetor que guardará as string;
  2. O segundo é a string que será repartida;
  3. 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í!

Outras dicas deste autor

Shell script - Variáveis especiais

Manipulação de strings no bash

Compilando PHP 5.4.X no Debian/Ubuntu

Leitura recomendada

Microsoft Visual Studio Code no GNU/Linux

Efetuando cálculo de Aspect Ratio de vídeos em C/C++

C compiler Cannot create executable?

MDK (Mix Development Kit) no Projeto GNU

Baixe de graça alguns livros do O'Reilly

  

Comentários
[1] Comentário enviado por julio_hoffimann em 15/02/2013 - 18:36h

Oi Vitor, parabéns.

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.

[2] Comentário enviado por VitorLuis em 15/02/2013 - 19:18h

Op Julio,

obrigado pelas dicas, essa foi a minha primeira dica, então, me falta experiencia. rsrs

Obrigado pela atenção.

[3] Comentário enviado por Targueriano em 27/06/2014 - 22:53h

Continue escrevendo e repetindo, quando se está explicando e é algo informal, quanto maior o número de repetição, melhor. Parabéns!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts