HI Leute,
kann es sein, dass in C++ die switch-Anweisung mit Strings nicht verwendet werden darf?
Gruß
Konstantin
HI Leute,
kann es sein, dass in C++ die switch-Anweisung mit Strings nicht verwendet werden darf?
Gruß
Konstantin
Elektrotechnik Student
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.
Gruß Boron (der sich oft wegen mieser Rechtschreibung anderer die Augen reiben muss)
LINUX IS LIKE AN INDIAN TENT: NO GATES, NO WINDOWS AND AN APACHE INSIDE!
Hardware Monitoring unter Linux -> http://santafu.sourceforge.net (Temperaturen, Lüfterdrehzahlen und Spannungen)
Wie ist das gemeint?Zitat von Boron
Etwa so:
GrußCode:string s1; int i1; i1 = ( s1 == "ausdruck_1" ) ? 1; i1 = ( s1 == "ausdruck_2" ) ? 2; switch (i1) { case 1: ... }
Konstantin
Elektrotechnik Student
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.
Geändert von Boron (27-05-2006 um 12:55 Uhr)
Gruß Boron (der sich oft wegen mieser Rechtschreibung anderer die Augen reiben muss)
LINUX IS LIKE AN INDIAN TENT: NO GATES, NO WINDOWS AND AN APACHE INSIDE!
Hardware Monitoring unter Linux -> http://santafu.sourceforge.net (Temperaturen, Lüfterdrehzahlen und Spannungen)
Mit dem MAP Container ist es ja wirklich elegant gelöst. Das habe ich dann auch so übernommen.
Vielen Dank.
Gruß
Konstantin
Elektrotechnik Student
Lesezeichen