
Olá pessoal,
Vejo muitas pessoas com dúvida em relação a como fazer um split ou explodir uma string em partes usando um delimitador.
Vou então mostrar algumas técnicas possíveis de executar isso.
Vamos usar uma frase de exemplo:
O rato roeu a roupa do rei de roma.
Nossa intenção é separar cada palavra contida na frase usando o caracter [espaço] como delimitador e com isso ter uma lista em memória com todas as palavras encontradas.
Vou mostrar agora 3 métodos de fazer isto em C++ de forma prática e fácil.
1 – Se você usa a biblioteca Boost, use o código abaixo para em 3 linhas obter um vetor de strings com as palavras:
#include <boost/algorithm/string.hpp>
int main()
{
vector<string> results;
boost::split(results, line, boost::is_any_of(";"));
}
2 – Usando agora uma função antiga para saber o ponteiro na string de onde começa cada palavra:
#include
#include
int main() {
char s[] = "one, two,, four , five,"; /* mutable! */ const char* p;
for (p = strtok( s, "," ); p; p = strtok( NULL, "," )) {
printf( "\"%s\"\n", p );
}
return 0;
}
3 – E por último, uma função simples que funciona basicamente como o método #1:
#include <string>
#include <vector>
void split(string str, string separator, vector<string>* results)
{
int found;
found = str.find_first_of(separator);
while(found != string::npos)
{
if(found > 0)
{
results->push_back(str.substr(0,found));
}
str = str.substr(found+1);
found = str.find_first_of(separator);
}
if(str.length() > 0)
{
results->push_back(str);
}
}
int main()
{
vector<string> results;
split("O rato roeu a roupa do rei de roma", " ", &results);
}
É isso ai. Espero que com estes códigos um pouco simples, ajudem a todos.












