[gelöst]Abfrage auf Buchstaben ?!



  • Scheinbar weiss niemand, was jetzt das konkrete Problem ist.

    meinhana schrieb:

    Ich hab ein 10x10 gefülltes Array von A0 - A9 & J0 - J9

    Dein Feld sieht so aus?

    A0 A1 A2...A9
    J0
    J1
    J2
     .
     .
     .
    J9
    

    Was genau willst Du hier machen? Bzw.: wie sieht ein richtiger input fuer diese Funktion aus?
    z.B. "A0" oder "a7", aber nicht "asdf" oder "a"?

    int Mensch::getzeile(string input)
    {
        if(input[0]<'a')
        {
        return input[0] - 'A';
        }
        else
        {
            return input[0] - 'a';
        }
    }
    


  • Sofern du die Nerven dazu hast, schau dir mal <regex> an.

    Beispielcode:

    if (std::tr1::regex_match(string.c_str(), std::tr1::regex("([0-9]+)")))
    

    (ist jetzt nicht der sauberste Code, also bitte verzeihen.. kannst auch auf spezifische Buchstaben usw überprüfen..



  • Also ich verstehe das Problem immer noch nicht, was ist überhaupt gewollt/erwartet und was passiert oO ?!

    Das sollte der TE mal klären...



  • Naja, das Problem ist, dass ich eine Koordinate haben will, also "A0" -> klappt alles, doch wenn ich "a" oder nur "0" eingebe, stürzt das problem ab...



  • Du brauchst etwas in der Art:

    void Mensch::getkoord(string text, int* zeile, int* spalte)
    {
        string input;
        cout << text << endl;
        bool eingabeOkay = true;
    
        do
        {
           cin >> input;
           if(input.size() != 2)
           {
              eingabeOkay = false;
           }
           else
           {
              if(input[0] >= 'a' && input[0] <= 'j' &&
                 input[1] >= '0' && input[1] <= '9')
                   ; //alles gut
              else
                 eingabeOkay = false;
           }
         }while(!eingabeOkay);
    
        *zeile = getzeile(input);
        *spalte = getspalte(input);
    }
    


  • Genauuu 🙂
    Mal gucken obs klappt ^^ ❤



  • geht nicht.



  • wiesooooooooo
    ne fehlermeldung des compilers wäre schon bisschen besser als "geht nicht"



  • Der boolsche Wert muss in der Schleife initialisiert werden:

    void Mensch::getkoord(string text, int* zeile, int* spalte)
    {
        string input;
        cout << text << endl;
        bool eingabeOkay;
    
        do
        {
           eingabeOkay = true;
           cin >> input;
           if(input.size() != 2)
           {
              eingabeOkay = false;
           }
           else
           {
              if(input[0] >= 'a' && input[0] <= 'j' &&
                 input[1] >= '0' && input[1] <= '9')
                   ; //alles gut
              else
                 eingabeOkay = false;
           }
         }while(!eingabeOkay);
    
        *zeile = getzeile(input);
        *spalte = getspalte(input);
    }
    


  • Das mit dem "geht nicht" hab ich nicht geschrieben !



  • Ich denke zwar, dass ich gerade auf dem Schlauch stehe und die Problematik nicht sehe aber ich poste dennoch mal:

    bool GetCoord(std::string const& Str, unsigned& X, unsigned& Y)
    {
        if(Str.size() != 2)
            return false;
        if(!(Str[0] >= 'A' && Str[0] <= 'J' || Str[0] >= 'a' && Str[0] <= 'j'))
            return false;
        if(!(Str[1] >= '0' && Str[1] <= '9'))
            return false;
        X = Str[0] - (Str[0] >= 'a' ? 'a' : 'A');
        Y = Str[1] - '0';
        return true;
    }
    

    Und hier das Anwendungsbeispiel:
    http://ideone.com/fZvTDh



  • Die Antwort von Belli hat funktioniert! Hab noch ein cout eingefügt und alles klasse 🙂
    Danke 👍


Anmelden zum Antworten