Como faço para iterar sobre as palavras de um fio?
I'estou tentando iterar sobre as palavras de um fio.
A cadeia pode ser assumida como sendo composta de palavras separadas por espaço em branco.
Note que I'não estou interessado nas funções de string C ou nesse tipo de manipulação/acesso de caracteres. Além disso, por favor dê precedência à elegância sobre a eficiência em sua resposta.
A melhor solução que eu tenho neste momento é:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
string s = "Somewhere down the road";
istringstream iss(s);
do
{
string subs;
iss >> subs;
cout << "Substring: " << subs << endl;
} while (iss);
}
Há uma maneira mais elegante de fazer isto?
2885
3
Esta é a minha maneira favorita de iterar através de um fio. Podes fazer o que quiseres por palavra.
O STL ainda não tem um método desse tipo disponível.
Entretanto, você pode utilizar a função C's [
strtok()
][1] utilizando o membro [std::string::c_str()
][2], ou você pode escrever o seu próprio. Aqui está um exemplo de código que encontrei após uma rápida busca no Google ("STL string split"):Extraído de:
Se você tiver perguntas sobre a amostra de código, deixe um comentário e eu explicarei.
E só porque não implementa um 'tippedef' chamado iterator ou sobrecarregar o '
Usando
std::stringstream
como você tem funcionado perfeitamente bem, e fazer exatamente o que você queria. Se você'está apenas procurando por uma maneira diferente de fazer as coisas, você pode utilizar [std::find()
][1]/[std::find_first_of()
][2] e [std::string::substr()
][3].Aqui's um exemplo: