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 von cin ist 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::istringstream und lese daraus das Kommando aus - wie gehabt

    std::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.


Anmelden zum Antworten