Großbuchstabe <--> Kleinbuchstabe
-
Hi,
Was ist an folgenden Programm falsch?(ich kanns mir nicht so recht erklären).
Das Programm soll eingegeben Kleinbuchstaben in Großbuchstaben umwandeln und andersrum./* Groß in Kleinbuchstaben und umgekehrt */ #include <iostream> #include <cctype> using namespace std; int main() { char bs, bs2; cout << "Buchstaben eingeben: "; cin >> bs; bs2 = bs; if(islower(bs)) { toupper(bs); } else if(isupper(bs)) { tolower(bs); } else { switch(bs) { case 'ä' : bs = 'Ä';break; case 'ö' : bs = 'Ö';break; case 'ü' : bs = 'Ü';break; case 'Ä' : bs = 'ä';break; case 'Ö' : bs = 'ö';break; case 'Ü' : bs = 'ü';break; default:; } } if(islower(bs2)) { cout << "Grossbuchstabe von " << bs2 << ": " << bs << endl; } else if(isupper(bs2)) { cout << "Kleinbuchstabe von " << bs2 << ": " << bs << endl; } else { cout << "Eingabe war kein Buchstabe!" << endl; } cin.sync(); cin.clear(); cin.get(); return 0; }
Danke und Tschö
-
-
?!?!?!??!??????
kann mit der Antwort leider nichts anfangen, wieso (3) ??
-
Achso, du surfst nicht im dev-Modus? OK dann sag ichs dir so: tolower ist eine Funktion, die ihre Argument in einen Kleinbuchstaben gewandelt zurückgibt. Du scheinst zu glauben, sie würde das Argument an Ort und Stelle umwandeln. Aus tolower(x) solltest du daher x = tolower(x) machen. Für toupper gilt natürlich das gleiche.
-
/* Groß in Kleinbuchstaben und umgekehrt */ #include <iostream> #include <cctype> using namespace std; int main() { char bs, bs2; cout << "Buchstaben eingeben: "; cin >> bs; bs2 = bs; if(islower(bs)) { bs = toupper(bs); } else if(isupper(bs)) { bs = tolower(bs); }; if(bs == 'ä' || bs == 'Ä' || bs == 'ö' || bs == 'Ö' || bs == 'ü' || bs == 'Ü') { switch(bs) { case 'ä' : bs = 'Ä';break; case 'ö' : bs = 'Ö';break; case 'ü' : bs = 'Ü';break; case 'Ä' : bs = 'ä';break; case 'Ö' : bs = 'ö';break; case 'Ü' : bs = 'ü';break; default:; } }; if(islower(bs2)) { cout << "Grossbuchstabe von " << bs2 << ": " << bs << endl; } else if(isupper(bs2)) { cout << "Kleinbuchstabe von " << bs2 << ": " << bs << endl; } else { cout << "Eingabe war kein Buchstabe!" << endl; }; cin.sync(); cin.clear(); cin.get(); return 0; }
Die Umlaute wollen noch nicht so richtigen, aber warum?
-
Hier spielt Dir die Konsole einen Streich: Für die Konsole hat Microsoft anscheinend einen anderen Zeichensatz verwendet, als im "normalen" Texteditor unter Windows (ASCII vs. ANSI????). Auf alle Fälle hatte ich mal dasselbe Problem. Ich hab das dann so gelöst, dass ich ein Progrämmchen geschrieben habe, das mir die Codes der entsprechenden Taste lieferte. Damit habe ich für die Umlaute folgendes ermittelt:
ü=-127
Ü=-102
ö=-108
Ö=-103
ä=-124
Ä=-114Wenn Du diese Codes verwendest, dann sollte es mit den Umlauten klappen. Was ich auch nicht weiss ist, warum da negative Zahlen rauskommen... Eigentlich sollten es positive Zahlen zw. 0 und 255 sein. Aber wie auch immer, so klappts!
Gruss!
Andreas
-
char ist signed? also in 8bit positive und negative werte.
d.h. geht 255 garnichtwo sollen da noch negative werte sein?
toUpper(char &c) { c=c&0xDF; }