Hilfe!!! zu: Umwandlung in Großbuchstaben mit if-Anweisung
-
-
Nur bräuchte man dafür doch <cctype>? Das beißt sich doch mit der Aufgabenstellung?
-
Vielen lieben Dank! hab es bis auf eine kleinigkeit verstanden... warum muss ich die Differenz 32 abziehen? ich habe mir die ascii Tabelle angeschaut und sehe keinen zusammenhang mit der 32. (Ist mir schon etwas peinlich
aber will es wirklich verstehen)
-
Jul4ik-89 schrieb:
Vielen lieben Dank! hab es bis auf eine kleinigkeit verstanden... warum muss ich die Differenz 32 abziehen? ich habe mir die ascii Tabelle angeschaut und sehe keinen zusammenhang mit der 32. (Ist mir schon etwas peinlich
aber will es wirklich verstehen)Ich ziehe meine Frage zurück. Hab es verstenaden

Danke Leute... besonders an bruhial
-
Was ist denn mit der offensichtlichen Lösung?
char mytoupper(char c) if(c == 'a') return 'A'; else if(c == 'b') return 'B'; else if(c == 'c') return 'C'; ... else if(c == 'z') return 'Z'; else return c; }
-
Irgendwie bin ich jetzt irritiert
27 Codezeilen statt 3 würde mir nun gar nicht einfallen? 
-
#include <iostream> using namespace std; int main(){ char a; cin >> a; cout << a << endl;//hier gar keine ausgabe if(a>='a' && a<='z') { a-=32;//('a'-'A') statt 32 } cout << a << endl;//'\n' statt endl }
-
EDIT: Sorry, mein Fehler
-
Da jetzt schon Komplettlösungen im Umlauf sind, hier noch eine kurze und prägnante:
int main() { for (unsigned char c; cin >> c;) cout.put(toupper(c)); }Gehen wir mal Schritt für Schritt durch:
unsigned char c;ist das Statement des Schleifenkopfs (der bekanntermaßen die Formfor( Anweisung; Weiterlaufbedingung; Ausdruck )hat).unsignedweiltoupperdavon ausgeht, dass alle Zeichenwerte positiv sind.- cin >> c extrahiert ein Zeichen aus dem Strom und speichert es in
c. Anschließend ergibt der Ausdrucktruewenn der Stream noch läuft; falls das Ende erreicht wurde, d.h. die Konsole EOF an den Strom (stdin) gibt, ergibt der Ausdruckfalse. Damit wäre die Weiterlauf-Bedingung nicht erfüllt, und das Programm wird beendet. - Falls nicht abgebrochen wurde, gibt
cout.put(toupper(c))das Ergebnis vontoupperaus, nachdem es nachcharkonvertiert wurde. Wir wissen, dasstoupperniemalsEOFzurückgeben wird, wenncin >> cnicht fehlschlug; daher ist diese Konvertierung sicher.cout << toupper(c)funktioniert nicht, da der Rückgabewert vontoupper intist (was denEOFfall abdeckt;EOFhat keinen vonunsigned charrepräsentierbaren Wert), wir würden daher nur den Codepoint als Zahl ausgeben. Der Rückgabewert vontoupperist, wenn ungleich EOF, ein positiver Wert (bspw. 0 bis 255). Es ist sehr wahrscheinlich, dass die Konvertierung zuchar(welches wahrscheinlich -128 bis 127 abdeckt) alleintWerte entsprechend überträgt, aber diese Konvertierung kann von Implementierungen abhängen, daher wäre es theoretisch am sicherstenstd::char_traits<char>::to_char_typezu verwenden (in praktisch allen Fällen ist das aber überflüssig).
-
Jul4ik-89 schrieb:
Nun soll ich das nur mit Hilfe der if-Anweisng lösen und kann auch nur die " #include <iostream>" Bibliothek verweden.
LGtoupper ist allerdings in ctype.h
-
korrekterweise in diesem Unterforum <cctype>. Hatten wir aber schon.