Hvordan itererer jeg over ordene i en streng?
Jeg forsøger at iterere over ordene i en streng.
Strengen kan antages at være sammensat af ord adskilt af mellemrum.
Bemærk, at jeg ikke er interesseret i C strengfunktioner eller den slags tegnmanipulation/adgang. Giv også venligst elegance forrang for effektivitet i dit svar.
Den bedste løsning jeg har lige nu 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);
}
Er der en mere elegant måde at gøre dette på?
2885
3
Dette er min foretrukne måde at iterere gennem en streng på. Du kan gøre hvad du vil pr. ord.
STL har ikke allerede en sådan metode til rådighed.
Du kan dog enten bruge C's [
strtok()
][1] funktion ved at bruge [std::string::c_str()
][2] medlemmet, eller du kan skrive din egen. Her er et kodeeksempel, som jeg fandt efter en hurtig Google-søgning (&"STL string split"):Taget fra:
Hvis du har spørgsmål til kodeeksemplet, så efterlad en kommentar, og jeg vil forklare det.
Og bare fordi den ikke implementerer en
typedef
kaldet iterator eller overloader `Det fungerer fint at bruge
std::stringstream
som du har gjort, og det gør præcis det, du ønskede. Hvis du bare leder efter en anden måde at gøre tingene på, kan du bruge [std::find()
][1]/[std::find_first_of()
][2] og [std::string::substr()
][3].Her er et eksempel: