String und switch/case Anwendung
-
Hallo!
Ich hab mal wieder ein (hoffentlich) typischer Anfängerfehler.
Wir hatten die Aufgabe bekommen eine Switch anweisung mit Strings zu programmieren. Mein Quellcode ist laut meines Lehrers mehr oder weniger richtig, zumindestens konnte er beim schnellen rüberschauen keinen Fehler finden.
Ich weiß nicht ob die möglichkeit überhaupt besteht Strings und Switches miteinander zu kombinieren.
Der Compiler zeigt mir den Fehler:[C++ Fehler] Unit1.cpp(14): E2383 Der Auswahlausdruck in den Klammern einer switch-Anweisung muß ganzzahlig sein
#include "iostream.h" #include "conio.h" #include "string.h" #include "cstddef.h" string stWoche; void main() { cout<<"Bitte geben sie den Wochentag ein"<<endl; cout<<"Geben sie bitte JETZT den Wochentag ein:"; cin>>stWoche; switch (stWoche) { case "montag": { cout<<"Heute ist Montag"; } break; case 'Montag': { cout<<"Heute ist Montag"; } break; case 'dienstag': { cout<<"Heute ist Dienstag"; } break; case 'Dienstag': { cout<<"Heute ist Dienstag"; } break; } case 'mittwoch': { cout<<"Heute ist Mittwoch"; } break; case 'Mittwoch': { cout<<"Heute ist Mittwoch"; } break; case 'donnerstag': { cout<<"Heute ist Donnerstag"; } break; case 'Donnerstag': { cout<<"Heute ist Donnerstag"; } break; case 'freitag': { cout<<"Heute ist Freitag";<<endl; cout<<"Endlich Wochenende"; } break; case 'Freitag': { cout<<"Heute ist Freitag";<<endl; cout<<"Endlich Wochenende"; } break; case 'samstag': { cout<<"Heute ist Samstag"; } break; case 'Samstag': { cout<<"Heute ist Samstag"; } break; case 'sonntag': { cout<<"Heute ist Sonntag"; } break; case 'Sonntag': { cout<<"Heute ist Sonntag"; } break; getch(); }
es wäre sehr lieb wenn mir einer helfen könnnte....
Liebe grüße
Sarah
-
switch erfordert in den Klammern ein Objekt eines integralen Typ, strings gehen nicht.
-
gibt es eine andere möglichkei als Integer?!
-
sarah s. schrieb:
Mein Quellcode ist laut meines Lehrers mehr oder weniger richtig, zumindestens konnte er beim schnellen rüberschauen keinen Fehler finden.
Wao
Was ist der den für ein Hobbyprogrammierer.
sarah s. schrieb:
gibt es eine andere möglichkei als Integer?!
Nur ganzzahlige Werte bei switch, weil da ne Sprungtabelle draus wird. Musst halt ein if...else if ... else machen
-
if(string == "Montag" || string == "montag") ... else if(string == "Dienstag" || "dienstag") ...
-
Mit switch() - da kannst du beliebige Ganzzahltypen (char, short, int, long in allen Varianten) verwenden. Wenn du unbedingt mit Strings arbeiten willst, brauchst du eine if-else-Kaskade oder Um"rechnungen" über map<>s oder vector<>en.
(btw, die "Zeichen"literale wie
'Montag'
sind auch kritisch - die sind zwar afaik erlaubt, aber was für ein Wert sich dahinter verbirgt, ist compiler-abhängig)
-
jo, z.b. char oder bool -.-
btw. "int main" statt "void main"
und bei den Headern wirt du so wohl glücklicher:#include <iostream> #include <conio.h> #include <string> #include <cstddef>
Beachte dann aber, dass "cout", "string" etc. alle im Namensraum "std" liegen.
-
sarah s. schrieb:
Mein Quellcode ist laut meines Lehrers mehr oder weniger richtig, zumindestens konnte er beim schnellen rüberschauen keinen Fehler finden.
man sollte den leuten in der schule per gesetz kein c oder gar c++ beibringen dürfen. die geballte inkompetenz der lehrer versaut potenzielle talente schon im ansatz.
-
In meiner schule gehöre ich zum letzten Jahrgang mit C++ im Info LK, das Zentralabi später wird nurnoch Java haben.
-
Gott bewahre...
Da kommen sicherlich solche schönen Klassen bei raus (ganz im Sinne von OOP und Kapselung):
class Name { private String name; String getName() { return name; } void SetName( String name ) { this.name=name; } }
Btw, kann das sein, dass das eine Angewohnheit von Javajanern ist? Vielleicht hab ich bis jetzt keine guten Java-Programmierer getroffen, aber alle, die ich bis jetzt getroffen habe (zugegeben, einstelliger Bereich
), haben _immer_ solche private-data + get/set-Konstrukte verwendet.
-
Badestrand schrieb:
Btw, kann das sein, dass das eine Angewohnheit von Javajanern ist?
also ich würde mir wünschen, dass das eine angewohnheit *aller* programmierer ist, wenn die alternative public variablen sind. die sind nämlich die pest. kennzeichen fauler, verantwortungsloser programmierer und der grundstein unwartbarer programme.
warum gibts das schöne "property" keyword was ich noch aus object pascal kenne eigentlich nicht in c++?
-
Hab gehört, dass man soch sowas angewöhnen sollte, um eine eventuelle Wertekontrolle zu ermöglichen, und dass solche getter und setter in C# standardisiert worden sind.
-
cpt. obvious schrieb:
Badestrand schrieb:
Btw, kann das sein, dass das eine Angewohnheit von Javajanern ist?
also ich würde mir wünschen, dass das eine angewohnheit *aller* programmierer ist, wenn die alternative public variablen sind.
Nein, die Alternative ist ein sauberes Design. Und um nur ein paar Daten zusammenzufassen gibts in C++ zum Glück structs (gut, praktisch dasselbe wie eine default-public-class, aber häufig als public-Variablen-Sammlung genutzt).
-
wenn es wirklich nur eine struktur ist um daten zusammen zu fassen und es auch immer bleiben wird, dann spricht nix gegen public variablen. aber sobald es möglich ist, dass (später) noch irgendwas geprüft oder geändert wird bei get oder set, würde ich sie auf jeden fall einbauen.