Pular para o conteúdo

Split de String em C++

Dica publicada em C/C++ / Miscelânea
Vitor Luis VitorLuis
Hits: 48.906 Categoria: C/C++ Subcategoria: Miscelânea
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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;
}
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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í!

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Compilando PHP 5.4.X no Debian/Ubuntu

Shell script - Variáveis especiais

Manipulação de strings no bash

CodeBlocks - IDE C++ no Ubuntu 12.04

Lista de livros C++

Compilar programas em C no Ubuntu com o gcc

Inserindo e removendo comentários em C/C++ de forma rápida no VIM

Gnuconio, a conio para Windows e GNU/Linux (v0.1)

#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

Entre na sua conta para comentar.