Hvordan itererer jeg over ordene i en streng?
Jeg prøver å iterere over ordene i en streng.
Strengen kan antas å være sammensatt av ord atskilt med mellomrom.
Merk at jeg ikke er interessert i C-strengfunksjoner eller den slags tegnmanipulering / tilgang. Legg også vekt på eleganse fremfor effektivitet i svaret ditt.
Den beste løsningen jeg har akkurat nå er:
#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);
}
Finnes det en mer elegant måte å gjøre dette på?
2885
3
Dette er min favoritt måte å iterere gjennom en streng. Du kan gjøre hva du vil per ord.
STL har ikke en slik metode tilgjengelig allerede.
Du kan imidlertid enten bruke C's [
strtok()
][1] funksjon ved å bruke [std::string::c_str()
][2] medlem, eller du kan skrive din egen. Her er et kodeeksempel jeg fant etter et raskt Google-søk ("STL string split"):Hentet fra:
Hvis du har spørsmål om kodeeksemplet, legg igjen en kommentar, så skal jeg forklare.
Og bare fordi den ikke implementerer en
typedef
kalt iterator eller overbelaster `Ved hjelp av
std::stringstream
som du har fungerer helt fint, og gjør akkurat det du ønsket. Hvis du bare leter etter en annen måte å gjøre ting på, kan du bruke [std::find()
][1]/[std::find_first_of()
][2] og [std::string::substr()
][3].Her er et eksempel: