Viac na
Ako iterovať slová reťazca?
Snažím sa iterovať slová reťazca.
Dá sa predpokladať, že reťazec sa skladá zo slov oddelených bielymi znakmi.
Všimnite si, že ma'nezaujímajú reťazcové funkcie jazyka C ani takýto druh manipulácie/prístupu k znakom. Vo svojej odpovedi tiež prosím uprednostnite eleganciu pred efektívnosťou.
Najlepšie riešenie, ktoré mám teraz k dispozícii, je:
#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);
}
Existuje elegantnejší spôsob, ako to urobiť?
2885
3
Toto je môj obľúbený spôsob iterácie reťazca. Na jedno slovo môžete robiť, čo chcete.
STL už takúto metódu nemá k dispozícii.
Môžete však použiť funkciu [
strtok()
][1] jazyka C pomocou člena [std::string::c_str()
][2] alebo si napísať vlastnú. Tu je ukážka kódu, ktorú som našiel po rýchlom vyhľadaní v Googli ("STL string split"):Prevzaté z:
Ak máte otázky týkajúce sa ukážky kódu, zanechajte komentár a ja vám to vysvetlím.
A to, že neimplementuje
typedef
s názvom iterátor alebo nepreťažuje operátor `Použitie
std::stringstream
, ako ste to urobili, funguje úplne v poriadku a robí presne to, čo ste chceli. Ak však hľadáte iný spôsob, môžete použiť [std::find()
][1]/[std::find_first_of()
][2] a [std::string::substr()
][3].Tu je príklad: