String-Input als Variabel nutzen?



  • Hallo,

    ist es möglich, dass man einen String-input als Variabel benutzt?
    Also z.B.:

    #include<iostream.h>
    
    char zug[2] 
    int feld[10] 
    const int e2 = 2; 
    
    void main()
    {
    cin >> zug; // z.B. e2 als Eingabe 
    feld[zug] = 0; // hier hoffe ich, dass meine Konstante 'e2' benutzt wird 
    }
    

    kann man das so oder so ähnlich programmieren?
    Ich brauche das für die Schachnotation und möchte nicht 64 Bedingungen schreiben.

    modus

    [ Dieser Beitrag wurde am 05.07.2003 um 13:58 Uhr von modus editiert. ]

    [ Dieser Beitrag wurde am 05.07.2003 um 14:08 Uhr von modus editiert. ]

    [ Dieser Beitrag wurde am 05.07.2003 um 15:40 Uhr von modus editiert. ]



  • Kann mir denn keiner helfen?
    Ich würde mich wirklich freuen, wenn mir jemand hilft!

    Danke modus



  • Hallo,

    das wird nicht gehen.
    Du kannst aber eine mapstd::string,int machen.

    // Zuweisung von konstanten und Strings
    map<std::string,int> zuege;
    
    // Anlegen aller strings und zugehörigen Konstanten
    zuege.insert(make_pair("e2",2));
    zuege.insert(make_pair("e3",3));
    
    [...]
    
    char zug[3]; //
    cin >> zug; // Einlesen des Zuges
    
    // Hier muss die Eingabe existieren
    feld[zuege[zug]] = 0; // Und verwenden der Eingabe als Konstante. 
    
    // Hier wird geprüft ob die Eingabe ok ist
    map<std::string,int>::iterator pos = zuege.find(zug);
    if(pos != zuege.end())
       feld[zuege[pos-second]] = 0; // Und verwenden der Eingabe als Konstante.
    

    [ Dieser Beitrag wurde am 05.07.2003 um 15:50 Uhr von Knuddlbaer editiert. ]



  • es gibt kein iostream.h und kein void main.
    du solltest zum eingeben string nehmen, weil der mitwaechst.
    was du machen willst, geht mit einer map.
    aber geschickter waere wohl int feld[8][8]; und dann feld[zug[0]-'a'][zug[1]-1]=0;



  • Danke für die Antwort!

    Das muss ich dann aber doch für aller 64 Felder machen, oder? Ich hatte gehofft eine schnellere Lösung zu finden. Trotzdem Danke, dass hilft mir auf jeden fall auch schon mal weiter!



  • zuege.insert(make_pair("e2",2));
    

    wuerde ich so schreiben:

    zuege["e2"]=2;
    


  • wenn du manchmal auch denkst, stellst du fest, dass diese konstanten gewissen regeln folgen, so dass es 2 verschachtelte schleifen auch tun sollten.
    und wie gesagt:
    aber geschickter waere wohl int feld[8][8]; und dann feld[zug[0]-'a'][zug[1]-1]=0;

    edit: und wenn dein feld eindimensional bleiben muss:
    feld[(zug[0]-'a')*8+zug[1]-1]=0;

    [ Dieser Beitrag wurde am 05.07.2003 um 15:59 Uhr von PeterTheMaster editiert. ]



  • Es doch möglich die Eingabe nicht mit cin>> als String sondern mit getch() als einzelne Zeichen einzulesen.

    char xt;
    int x,y;

    cout<<"Geben Sie die koordinaten ein";
    xt=getch();
    y=getch();

    switch xt
    {
    case 'a' : x=1; break;
    case 'b' : x=2; break;
    case 'c' : x=3 usw.
    }

    so würdest Du zu 2 guten Koordinaten kommen mit denen Du weiterarbeiten kannst


Anmelden zum Antworten