string in switch case Konstrukt zuordnen



  • ich möchte einen string als entscheidungskretärium in einer switch anweisung benutzen.
    der quellcode sieht wie folgt aus:

    std::string buffer = ...
    
    switch( buffer.c_str() ) {
        case "dg_dN": 
            dg_dN = tmp;
            break;
        case "N_st": 
            N_st = tmp;
            break;
        ...
        default:
            counter--;
        break;
    }
    

    ich bekomme immer folgenden fehler:
    error: switch quantity not an integer
    kann man switch in kombination mit einem string benutzen? ich habe nur beispiele mit char gefunden und die werden, soweit ich weiß, intern über eine zahl repräsentiert.
    nun meine frage: kann



  • Hallo

    Man muss ein integer verwenden oder char verwenden.

    chrische



  • Lässt sich nur mit if-Anweisungen lösen, etwa

    if(buffer == "dg_dN") {
      // mach was
    } else if (buffer == "abc") {
      // mach was anderes
    } else if ..
    

    oder ähnlich. In switch dürfen nur ordinale Typen verwendet werden, also z.B. int oder char, aber nicht float, string, double u.a.



  • Hallo

    Da gab es doch auch noch den Trick das mit einer map zu lösen. Wie war das gleich?

    chrische



  • Klar - man kann eine string zu int-Abbildung mit einer Map erzeugen
    und dies auswerten. Aber man muss alle in Frage kommenden Zeichenketten
    samt int-Wert vorher in die Map packen. Overkill.

    Gruß! H



  • Man kann auch eine map string -> function pointer machen.
    Beides sind keine Tricks, und für beides gibts sinnvolle Anwendungen 😉
    Welchen "nicht Trick" du also meinst ... kann hier höchsten jmd. erraten. Wissen kann man es wohl nicht.


Anmelden zum Antworten