Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] switch-Anweisung auch mit String?



KRibel
27-05-2006, 11:50
HI Leute,

kann es sein, dass in C++ die switch-Anweisung mit Strings nicht verwendet werden darf?

Gruß

Konstantin

Boron
27-05-2006, 11:58
Klar darftst du das verwenden.
Aber es wird nicht funktionieren, da der C-Standard (gilt in diesem Fall auch für C++) vorschreibt: "The controlling expression of a switch statement shall have integer type."
Du darfst also nur Typen verwenden, die als integer-Zahl abgebildet werden können (char, short, int, long (und Kombinationen), und Adressen).

Du könntest entweder jedem String eine eindeutige Nummer zuweisen und dann mit switch/case arbeiten, oder du arbeitest mit String-Compare-Funktionen und if() else if() else Anweisungen.

KRibel
27-05-2006, 12:16
Du könntest entweder jedem String eine eindeutige Nummer zuweisen und dann mit switch/case arbeiten.

Wie ist das gemeint?

Etwa so:

string s1;
int i1;

i1 = ( s1 == "ausdruck_1" ) ? 1;
i1 = ( s1 == "ausdruck_2" ) ? 2;

switch (i1)
{
case 1: ...
}

Gruß
Konstantin

Boron
27-05-2006, 12:41
Der ? Operator ist zwar meiner Meinung nach extrem widerlich, aber das wäre ja eine Möglichkeit.
Wird natürlich doof, wenn es um viele mögliche Strings geht. Da ist das nicht mehr sehr performant durch die vielen String-Vergleichs-Aufrufe. 200 Strings -> 200 Aufrufe des ==-Operators :(.

Oder schau dir mal das hier an: http://www.sgi.com/tech/stl/Map.html. Das ist doch ganz gut. Und es ist sogar Teil der STL.

KRibel
27-05-2006, 12:57
Mit dem MAP Container ist es ja wirklich elegant gelöst. Das habe ich dann auch so übernommen.

Vielen Dank.

Gruß
Konstantin