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.


  • Mod

    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 lieber s[i] != '\0' als Abbruchbedingung (oder kurz: s[i] , oder noch kürzer, lass i weg und zähl direkt s 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.


Anmelden zum Antworten