Hogyan iterálhatok egy karakterlánc szavain?
I'm megpróbálom végigvenni egy karakterlánc szavait.
A karakterlánc feltételezhetően szóközökkel elválasztott szavakból áll.
Megjegyzendő, hogy nem érdekelnek a C karakterláncfüggvények vagy a karakterek ilyen jellegű manipulációja/hozzáférése. Kérjük, hogy válaszában az eleganciát helyezze előtérbe a hatékonysággal szemben.
A legjobb megoldás, amivel most rendelkezem, a következő:
#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);
}
Van ennél elegánsabb megoldás?
2885
3
Ez a kedvenc módszerem a karakterláncok iterálására. Szavanként azt csinálhatsz, amit csak akarsz.
Az STL még nem rendelkezik ilyen módszerrel.
Viszont vagy használhatjuk a C's [
strtok()
][1] függvényt az [std::string::c_str()
][2] tag használatával, vagy írhatunk sajátot. Íme egy kódminta, amelyet egy gyors Google-keresés után találtam ("STL string split"):A következő címből vettük:
Ha kérdésed van a kódmintával kapcsolatban, hagyj egy megjegyzést, és elmagyarázom.
És csak azért, mert nem implementál egy
typedef
nevű iterátort vagy nem terheli túl a `Az
std::stringstream
használata tökéletesen működik, és pontosan azt teszi, amit akartál. Ha azonban másképp szeretnéd csinálni a dolgokat, használhatod az [std::find()
][1]/[std::find_first_of()
][2] és az [std::string::substr()
][3]-t.Íme'egy példa: