String zwischen zwei Zeichen
-
Gibt es eine Funktion, die einen Teil eines Strings zwischen zwei Zeichen ermittelt?
Also etwa sowas:string str = "(abcd)"; str.getbetween("(",")"); cout << str << endl;Das dann nur abcd ausgegeben wird?
-
Denkbar wäre
#include <limits> #include <sstream> #include <string> std::string between(std::string const &s) { std::istringstream in(s); std::string token; in.ignore(std::numeric_limits<std::streamsize>::max(), '('); std::getline(in, token, ')'); return token; }Allerdings gibt es da einige Designfragen zu beantworten. Was, zum Beispiel, soll in folgenden Fällen passieren?
"abc" "(abc" "abc)" ")abc(" "(ab(cd)ef)" "(ab(cd)(e)f"
-
seldon schrieb:
Denkbar wäre
#include <limits> #include <sstream> #include <string> std::string between(std::string const &s) { std::istringstream in(s); std::string token; in.ignore(std::numeric_limits<std::streamsize>::max(), '('); std::getline(in, token, ')'); return token; }Danke, dass ist genau das was ich gesucht habe

Wenn ich danach nochmal getline aufrufe, nimmt er dann den zweiten Abschnitt oder?
Also wenn ich sowas hab:(abcd)(efgh)Dann kommt beim ersten mal abcd und beim zweiten mal efgh raus oder?
seldon schrieb:
Allerdings gibt es da einige Designfragen zu beantworten. Was, zum Beispiel, soll in folgenden Fällen passieren?
"abc" "(abc" "abc)" ")abc(" "(ab(cd)ef)" "(ab(cd)(e)f"Die Fälle gibts bei mir garnicht

Aber noch eine Frage hab ich. Ist es möglich zwei Trennzeichen zu benutzen, also ')' und '\n'?
-
Ich hab noch eine Frage zu dem Abschnit hier:
in.ignore(std::numeric_limits<std::streamsize>::max(), '(');Bei mir ist max() ein Makro, und deswegen wird auch ein kompilerfehler erzeugt. Wie mache ich dem kompiler klar, dass es sich um die Funktion von numeric_limits handelt?
-
ranger schrieb:
Ich hab noch eine Frage zu dem Abschnit hier:
in.ignore(std::numeric_limits<std::streamsize>::max(), '(');Bei mir ist max() ein Makro, und deswegen wird auch ein kompilerfehler erzeugt. Wie mache ich dem kompiler klar, dass es sich um die Funktion von numeric_limits handelt?
#undef max