2012-01-01 5 views
1

Je voudrais savoir comment découper une chaîne sur une plage:Comment diviser une chaîne sur une plage?

std::string = "some<foo>some<bar>some..."; 

besoin d'obtenir une fourchette comprise entre < ...>:

foo 
bar 
+0

Ce n'est pas clair. Qu'est-ce que vous voulez arriver à 'certains '? –

Répondre

2

Vous pouvez utiliser string::find à plusieurs reprises:

size_t pos = 0; 
while (true) { 
    size_t strt = mystring.find('<', pos); 
    pos = mystring.find('>', strt+1); 
    if (strt == string::npos || pos == string::npos) break; 
    cout << mystring.substr(strt+1, pos-strt-1) << endl; 
} 
+0

Y avait-il une raison pour que 'pos' ne soit pas local à la boucle mais' strt' est? –

+0

@SethCarnegie vous devez conserver 'pos' pour la prochaine itération de la boucle. – dasblinkenlight

+0

Oh whoops, manqué que –

0

En utilisant iterator:

string str = "some<foo>some<bar>some"; 

string::iterator i = str.begin(), token = i; 

while (i != str.end()) { 
    if(*i == '<') { 
     token = i+1; 
    } 
    else if (*i == '>') { 
     string item(token, i); 
     cout << item << endl; 
    } 
    i++; 
}