1. Leerzeichen bis letztes Zeichen aus String herausfiltern
-
ich habe den Code
while(eingabe != "exit") { cin>>eingabe; size_t pos = eingabe.find_first_of(' '); befehl = eingabe.substr(0, pos); try { parameter = eingabe.substr(pos, eingabe.length()); } catch(...){} cout<<"Der Befehl ist: "<<befehl<<"\nund die Parameter: "<<parameter<<endl; }wenn ich jetzt aber "hallo ich bins" eingebe kommt raus:
Der Befehl ist: hallo und die Parameter: Der Befehl ist: ich und die Parameter: Der Befehl ist: bins und die Parameter:warum? und wie kann ich machen, dass nur das bis zum 1. Leerzeichen als Befehl gesehen wird und der Rest (also alles nach dem 1. Leerzeichen) als Paramter?
-
std::cin liest nur bis es auf ein Leerzeichen, Tabulator, etc. trifft.
Probier mal std::getline(std::cin, eingabe) anstatt cin>>eingabe
-
fghfghfgh schrieb:
std::cin liest nur bis es auf ein Leerzeichen, Tabulator, etc. trifft.
Fast richtig. Verantwortlich dafür ist nicht std::cin, sondern
operator>>.
-
Ganz einfach:
>>ließt nur bis zum ersten Leerzeichen. Dh. deine Schleife wird für jedes Wort einmal ausgeführt und dann wird in diesem Word nochmal nach Leerzeichen gesucht, welche natürlich nicht gefunden werden.
Nimm statt>>einfach getline:std::string input, value, params; while(value != "exit") { getline(cin, input); value = input.substr(0, input.find(' ')); params = input.substr(input.find_last_of(' ')); std::cout << "value: " << value << "params: " << params << "\n"; }
-
Du koennest auch eine Kombination aus beiden machen:
while (eingabe != "exit") { cin >> befehl; // lese bis zum ersten whitespace character cin.ignore(1); // ignoriere newline zeichen getline(cin, parameter); // lese den rest der zeile als string cout << "\nBefehl: " << befehl << "\nParameter: " << parameter << "\n"; }
-
ich meinte, cin.ignore(1) ignoriert das Leerzeichen/Whitespace, dass noch von cin>> im Puffer liegt.
Meine Methode wuerde dir eine zusaetzliche Variable und das parsen des Strings ersparen :p
-
Morrison schrieb:
Du koennest auch eine Kombination aus beiden machen:
while (eingabe != "exit") { cin >> befehl; // lese bis zum ersten whitespace character cin.ignore(1); // ignoriere newline zeichen getline(cin, parameter); // lese den rest der zeile als string cout << "\nBefehl: " << befehl << "\nParameter: " << parameter << "\n"; }hey danke, das ist gut
