Konvertierung Text Klein zu Großschreibung
-
Hi.
ein festgelegter Text soll von Klein zu Großschreibung konvertiert werden.
Wieso funktioniert das bei mir nicht? Habe folgende 2 Funktionen:char toupper(char c) { c -= 20; return c; }
char* gross(char* s) { for (int i=0;i<30;i++) { if (s[i]<=122 && s[i] >= 97) toupper(s[i]); } return s; }
-
toupper modifiziert nicht, sondern gibt den neuen Wert zurück.
-
toupper gibt's auch in der Standardbibliothek und der macht es besser. Dein Fehler: Du kopierst das Zeichen, gibst dann ein verändertes Zeichen zurück, verwirfst diesen Rückgabewert. Nochmal Funktionen, insbesondere Funktionsargumente und Funktionsrückgabewerte angucken.
Design:
1. Die Prüfung, ob es überhaupt ein klein geschriebenes Zeichen ist, gehört von der Logik her zu toupper.
2. Deine Schleifenabbruchbedingung ist Müll. Nimm liebers[i] != '\0'
als Abbruchbedingung (oder kurz:s[i]
, oder noch kürzer, lass i weg und zähl direkts
hoch). Nochmal C-Strings angucken und verstehen, warum das besser ist.
-
Bei toupper/tolower und sonstigen Konsorten aus ctype.h sollte zur Vermeidung immer explizit nach unsigned char bei der Argumentübergabe gecastet werden, sonst erhält man im Falle vom implementierungsabhängigen char => signed char und negativen chars (resultierend bei >127) undefiniertes Verhalten.
-
Damit Umlaute richtig behandelt werden ist es unter Umständen nötig das du setlocale() benutzt.
-
strupr() aus string.h
-
noergel schrieb:
strupr() aus string.h
Ist selbst in C11 noch nicht im Standard, und somit auch nicht in <string.h>
Zudem soll er doch lernen und üben.