switch-Anweisung mit AnsiString



  • Hi zusammen,

    geht es im Borland c++ nicht eine switch-Anweisung mit einem AnsiString durchzuführen?

    wie folgt:

    AnsiString wireArt = "3wire";
    switch(wireArt)
         {
            case "3wire":dreiWire();
            case "6wire":sechsWire();
            default: ShowMessage("Keine Übereinstimmung!!");
         }
    

    danke Bench



  • Hallo,

    Nein, das geht nicht. Hier geht nur eine if/else Kaskade (hier am Besten) oder eine map.



  • Bench_XProjects schrieb:

    geht es im Borland c++ nicht eine switch-Anweisung mit einem AnsiString durchzuführen?

    Nein.

    Der switch ist in C++ nur für integrale Datentypen geeignet. Andere Sprachen helfen sich hier z.B. mit Hashwerten für Strings aus.

    cu André



  • hi,

    cool danke!
    Habe es mit, wie gesagt, mit elseif gemacht!!!

    Schade eigentlich!
    Kommt von c# und da gehts!!!:-)

    Danke Bench



  • Bench_XProjects schrieb:

    Schade eigentlich!
    Kommt von c# und da gehts!!!:-)

    In C# wird auch jedem String intern ein Inhaltsbezogener Hashwert zugewiesen (Zwei Strings mit dem gleichen Text haben den gleichen Hashwert). Der Trick bei C# ist nun das der switch in diesem Fall über den (integralen) Hashwert geht, und du von all dem nichts bemerkst da es im Hintergrund passiert.

    Sprich: Unter der Haube arbeitet auch C# nur mit integralen Datentypen beim Switch (alles andere ist auch performancetechnisch ein Problem).

    Theoretisch kannst du dir so etwas auch in C++ basteln (sofern du für jeden casefall den vorberechneten Wert einträgst und mit einer eigenen Hashfunktion arbeitest)...

    cu André
    P.S: Genau genommen ist es bei C# noch ein wenig anders, dies ist eine Vereinfachte Darstellung (In C# hat soviel ich weiß jeder inhaltlich identische String auch den gleichen Speicherbereich für den Text, und bei jeder Wertänderung wird ein neuer Bereich genommen [bzw. auf einen anderen mit identischen Inhalt verwiesen]).


Anmelden zum Antworten