Konsolen Befehle mit Zahleneingabe - Erkennung
-
Morgen

Ich schreibe gerade an meiner "Ingame" Konsole, und überlege gerade wie man am besten einen Befehl mit dem Format "set_xyz 1000" auswerten kann.
if(meinString.find(m.Commands.at(0))) == 0)Damit kann ich ja relativ gut überprüfen ob "set_xyz" der Anfang des Strings ist, aber ich weiß nicht wie ich jetzt die Zahl dahinter auswerten kann.
jemand eine Idee?
Gruß, Chris
-
Hi Chris,
cl90 schrieb:
if(meinString.find(m.Commands.at(0))) == 0)weiß nicht wofür das gut sein soll.
Dein von Dir beschriebenes Problem kann man z.B. so lösen - indem man die Information einfach von der Konsole einliest (ich unterstelle, es ist eine Konsolen-Applikation und Lesen voncinist möglich):#include <iostream> #include <string> int main() { using namespace std; for( string command; cout << "> ", cin >> command; cin.clear(), cin.ignore(999,'\n') ) { if( command == "set_xyz" ) { int zahl; if( cin >> zahl ) // <=== hier liest Du die Zahl { cout << " Sie haben 'set_xyz' mit Parameter " << zahl << " eingegeben" << endl; } } else if( command == "<was-anderes>" ) { ; // mach was anderes } else cerr << "Fehler bei der Eingabe!" << endl; } }
-
Es ist ein DirectX Programm. die Konsole ist selbst geschrieben, daher kann ich nicht mit cin arbeiten.
Ich erzeuge durch keydown-events einen String.Daher möchte ich diesen String mit vorgegeben Strings vergleichen, und im gegebenen fall den Wert nach dem Command übernehmen.
-
cl90 schrieb:
Es ist ein DirectX Programm. die Konsole ist selbst geschrieben, daher kann ich nicht mit cin arbeiten.
Ich erzeuge durch keydown-events einen String.Daher möchte ich diesen String mit vorgegeben Strings vergleichen, und im gegebenen fall den Wert nach dem Command übernehmen.
Dann packe den String - ich unterstelle er enthält z.B. "set_xyz 1000" - in einen
std::istringstreamund lese daraus das Kommando aus - wie gehabtstd::string meinString = "set_xyz 1000"; // Beispiel std::istringstream in( meinString ); // erfordert #include <sstream> std::string command; if( in >> command ) { // 'in' statt 'cin' if( command == "set_xyz" ) // ... ab hier so weiter, wie schon im geposteten Code
-
Du könntest die Eingabe in Token zerlegen und anschließend die Token auswerten.
-
danke

ich seh mir das mit den tokens mal an.edit:
Ich habe jetzt eine schöne variante gefunden:string buf; stringstream sstream; vector<string> token; sstream << eingabe; while(sstream >> buf) token.push_back(buf);jetzt kann ich einfach tokens.at(0) mit den commands vergleichen und dann tokens.at(1) überprüfen und anwenden.