substring auslesen
-
Hallo
Ich habe ein Wertepaar das aus einem Name und einem Wert besteht. Jetzt möchte ich in einem char stream nach diesem Namen suchen und dann den wert auslesen.
wie kann ich das machen?
-
indem das was links vom Trennzeichen als Key interpretiert wird und das rechts als Value.
-
und wie sieht der c++ befehl aus der das kann?
-
Keine Ahnung,
C-Style wäre es, den char[] char-für-char nach '=' abzusuchen, key ist dann 0-(index_of_equal-1) und value (index_of_equal+1) - Länge(char[]).
Es gibt sicher in C++ eine ellegantere Lösung...
-
Hier steht alles, was du brauchst:
http://www.bgsu.edu/departments/compsci/docs/string.html
- Pattern matching
- Substring
-
OT: juhu, ich kann googlen
-
Beispiel (nicht von mir):
// spliturl.cpp #include <iostream> #include <string> void splitUrl(std::string s) { std::string protocol, server, port, path; std::string::size_type pos, pos1; std::cout<<"URL: "<<s<<std::endl; // Doppelpunkt suchen pos = s.find(":"); if (pos != std::string::npos) { protocol = s.substr(0, pos); // :// überspringen s = s.substr(pos+3); } else { protocol = "http"; } // Server suchen Trennzeichen : oder / pos1 = s.find(":"); pos = s.find("/"); if (pos == std::string::npos) { server = s; port = "80"; path = "/"; } else if (pos1 != std::string::npos && (pos1 < pos)) { server = s.substr(0, pos1); port = s.substr(pos1+1, pos-pos1-1); path = s.substr(pos); } else { server = s.substr(0, pos-1); port = "80"; path = s.substr(pos); } std::cout<<"Protokoll: "<<protocol<<std::endl; std::cout<<"Server: "<<server<<std::endl; std::cout<<"Port: "<<port<<std::endl; std::cout<<"Pfad: "<<path<<std::endl; } int main(int argc, char **argv) { std::string s; for (int i = 1; i < argc; i++) { s = std::string(argv[i]); splitUrl(s); } }
-
Hallo
Danke für die Antworten. Ich habe es mal so probiert (rein C). Was haltet ihr davon.[code]
char* Test(char* str, char* param)
char lTemp[32];
char* pch;
int lLength;
int i = 0;
lLength = strlen(param);pch = strstr (str,param);
pch = pch + lLength;
while(pch[i] != '\x9')
{
lTemp[i] = pch[i];
i++;
}
lTemp[i] = '\0';return lTemp;
[quote]Soweit funktioniert es allerdings ist mir lTemp[i] = pch[i] nicht ganz geheuer.
-
Geht doch viiiel einfacher:
string s = "key:value"; int pos_of_seperator = s.find(":",0); string key = s.substr(0,pos_of_seperator-1); string value = s.substr(pos_of_seperator+1, s.length());
Achtung:
Über Grenzen hab ich mir keine Gedanken gemacht, getestet auch nicht!
-
der einfachste weg ist of der beste:
string dein_AusgangsString, name, wert; istringstream NameWert; getline(dein_AusgangsString,NameWert); getline(NameWert,name,':'); // ':' ist ein Beispiel getline(NameWert,wert,'\n'); cout << name << ", " << wert << endl;
ist irgendwie einfacher nachzuvollziehen, obwohl ich den weg den 'Gast221212' beschrieb auch lieber gehen würde