Kaip iteruoti eilutės žodžius?
Bandau iteruoti eilutės žodžius.
Galima daryti prielaidą, kad eilutę sudaro žodžiai, atskirti baltaisiais simboliais.
Atkreipkite dėmesį, kad manęs nedomina C eilutės funkcijos ar tokio pobūdžio manipuliavimas ženklais ir (arba) prieiga prie jų. Be to, atsakyme pirmenybę teikite elegancijai, o ne efektyvumui.
Geriausias sprendimas, kurį dabar turiu, yra toks:
#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);
}
Ar yra elegantiškesnis būdas tai padaryti?
2885
3
Tai mano mėgstamiausias būdas iteruoti eilutę. Kiekvienam žodžiui galite daryti ką tik norite.
STL tokio metodo dar nėra.
Tačiau galite naudoti C'kalbos [
strtok()
][1] funkciją, naudodami [std::string::c_str()
][2] narį, arba galite parašyti savo funkciją. Čia pateikiamas kodo pavyzdys, kurį radau po greitos "Google" paieškos ("STL string split"):Paimta iš:
Jei turite klausimų apie kodo pavyzdį, palikite komentarą ir aš paaiškinsiu.
O tai, kad jame neįgyvendintas
typedef
, vadinamas iteratoriumi, arba neperkrautas `Naudojant
std::stringstream
, kaip jūs turite, veikia puikiai ir daro būtent tai, ko norėjote. Tačiau jei ieškote kitokio būdo, galite naudoti [std::find()
][1]/[std::find_first_of()
][2] ir [std::string::substr()
][3].Štai pavyzdys: