Umwandlung Von Kleinbuchstabe Zu Großbuchstabe
-
Ich möchte, dass mein Programm nach Eingabe eines Kleinbuchstaben, ihn in einen Großbuchstaben umwandelt.
#include <stdio.h> #include <ctype.h> int main(void) { unsigned char buchstabe; printf("Geben Sie einen kleinen Buchstaben ein: "); scanf("%c", buchstabe); buchstabe = toupper(buchstabe); printf("konvertierter Buchstabe: %c", buchstabe); }
Ich bekommen beim ausführen einen Laufzeitfehler.
Wenn ich als Platzhalter "%d" einsetze anstatt "%c", läuft das Programm zwar, aber nicht mit dem gewünschten Ergebnis.
-
scanf("%c", &buchstabe);
-
scanf("%c", &buchstabe);
Den Adress-Operator (&) vergessen.
-
Gibt es vielleicht eine Möglichkeit die Umwandlung mit Bitoperatoren oder anders zu lösen?
Habe mir die Ascii-Tabelle mal angeguckt und einige Buchstaben in Bitnotation aufgeschrieben.
'a' = 0110 0001
'A' = 0100 0001'e' = 0110 0101
'E' = 0100 0101Habe festgestellt das sich jeweil nur das rechte Halbbyte ändert.
Hat jemand eine Idee wie man das ohne toupper() realisieren kann?
-
Fina schrieb:
Gibt es vielleicht eine Möglichkeit die Umwandlung mit Bitoperatoren oder anders zu lösen?
Habe mir die Ascii-Tabelle mal angeguckt und einige Buchstaben in Bitnotation aufgeschrieben.
'a' = 0110 0001
'A' = 0100 0001'e' = 0110 0101
'E' = 0100 0101Habe festgestellt das sich jeweil nur das linke Halbbyte ändert.
Hat jemand eine Idee wie man das ohne toupper() realisieren kann?
-
Fina schrieb:
Gibt es vielleicht eine Möglichkeit die Umwandlung mit Bitoperatoren oder anders zu lösen?
Wenn du sicher bist das du nur mit ASCII arbeitest:
Es ändert sich nur das Bit 5 (ganz rechts ist 0) mit dem Wert 32.Also kannst du den Wert verodern (hier bleibt ein Kleinbuchstabe auch einer)
buchstabe = buchstabe | 32;
oder dazuaddieren
buchstabe = buchstabe + 32;
als Kurzform:
buchstabe |= 32; buchstabe += 32;
Das ist aber nicht portabel und scheitert schon bei Umlauten und allen anderen Zeichen z.B.: wird ein '!' dann ein 'A'.
-
Ansonsten:
if(buchstabe >= 'a' && buchstabe <= 'z') buchstabe |= 32;
Warum willst du eigentlich kein toupper verwenden?
-
Also wennschon dann richtig
if(buchstabe >= 'a' && buchstabe <= 'z') buchstabe -= 32;
oder
if(buchstabe >= 'a' && buchstabe <= 'z') buchstabe &= 0xdf;