C Eingegebene Kleinbuchstaben in Großbuchstaben umwandeln und ausgeben

Jack159

Lieutenant
Registriert
Dez. 2011
Beiträge
766
Hi,

Ich versuche gerade ein C-Programm zu schreiben, bei dem man irgendeinen Satz in Kleinbuchstaben eingeben soll, bei dem dann alle Buchstaben in Großbuchstaben umgewandelt werden und der eingegebene Satz dann in reinen Großbuchstaben ausgegebn werden soll.
Das ganze funktioniert zwar, jedoch hapert es an der letzten Ausgabe. Dort wird komischerweise nur das 1. eingegebene Wort ausgegeben.

Meine Ein/Ausgabe damit ihr das Problem seht:


Tippen Sie etwas ein:hallo welt
Sie haben eingegeben: hallo welt

Die Laenge Ihrer Eingabe: 11
Mache h zu H
Mache a zu A
Mache l zu L
Mache l zu L
Mache o zu O
Mache zu
Mache w zu W
Mache e zu E
Mache l zu L
Mache t zu T
Sie haben eingegeben: HALLO



Das Programm:

Code:
#include<stdio.h>
#include <string.h>


int main() {
	
	printf("Tippen Sie etwas ein:");
	
		
		char eingegebenerInhalt[100];
		char temp = 0;
		fgets(eingegebenerInhalt, 100, stdin);
		printf("Sie haben eingegeben: %s\n", eingegebenerInhalt);
		
		int eingabeLaenge = strlen(eingegebenerInhalt);
		printf("Die Laenge Ihrer Eingabe: %d\n", eingabeLaenge);
		
		for(int i=0; i<eingabeLaenge-1; i++) {
			printf("Mache %c zu ", eingegebenerInhalt[i]);
			eingegebenerInhalt[i] = eingegebenerInhalt[i]-32;
			printf("%c\n", eingegebenerInhalt[i]);
		}	
		
		printf("Sie haben eingegeben: %s\n", eingegebenerInhalt);
		
	return 0;
}
 
Dein Problem ist das Leerzeichen. Wenn du immer 32 abziehst, wird aus dem Leerzeichen ein '\0' (also null), das den String beendet. Daher wird nicht mehr ausgegeben.
 
Java hat dafür so was schick es wie .toUpperCase oder so.
Such doch mal eine Entsprechung in C, das ersetzt dann die Rechnerei.
 
Ich bezweifle, dass ein Anfänger gleich diese Funktion verwenden sollte. So wird das sicher nicht gedacht sein.
 
Jack159 schrieb:
Meine Ein/Ausgabe damit ihr das Problem seht:

Tippen Sie etwas ein:hallo welt
Sie haben eingegeben: hallo welt
Die Laenge Ihrer Eingabe: 11
Mache h zu H
Mache a zu A
Mache l zu L
Mache l zu L
Mache o zu O
Mache zu
Mache w zu W
Mache e zu E
Mache l zu L
Mache t zu T
Sie haben eingegeben: HALLO

[/CODE]

Das hauptproblem wurde ja schon gennant. Etwas anderes wäre noch interessant: wenn man sich die ASCI-Tabelle der Zeichen anschaut:

http://sticksandstones.kstrom.com/appen.html

kann man sehen, dass vom großen zum entsprechenden kleinen Buchstaben in der Hexadezimaldarstellung immer irgendwo eine '1' weniger drin steht. Man braucht also bloss das entsprechnende Bit aus dem Buchstaben herauzunehmen oder einzusetzen und schon wandelt man von groß zu klein und umgekehrt.

Beispiel:

a ==> 0110-0001
A ==> 0100-0001

k ==> 0110-1011
K ==> 0100-1011

z ==> 0111-1010
Z ==> 0101-1010

Nur mal so als Idee. Pseudocode:

if zeichen >= 'a' AND zeichen <= 'z' THEN grosses_zeichen = zeichen & BINARY(1101-1111)

Das '&' ist der binäre (bitweise) UND-Operator.

Probier mal ;-)
 
Dered schrieb:
Java hat dafür so was schick es wie .toUpperCase oder so.
Such doch mal eine Entsprechung in C, das ersetzt dann die Rechnerei.

Das geht dann auch nur völlig am Sinn der Übung vorbei. Aber bleib bitte bei deinen PROACTIVE ENTERPRISE GRADE OBJECT ORIENTED JAVA UPPERCASE SOLUTIONS. Das ist gerade schwer hip im Biz! Wirst dich vor Aufträgen kaum retten können!

Manchmal weiß ich echt nicht, was sich die Leute hier denken. Hallo ich lerne gerade, wie man Daten von stdin einliest. Computerbaseantwort: Da wechselst du am besten zu C# und öffnest ein Windows Form mit Input Control palaverpalaver.

Wem nützt sowas?
 
asdfman schrieb:
Manchmal weiß ich echt nicht, was sich die Leute hier denken. Hallo ich lerne gerade, wie man Daten von stdin einliest. Computerbaseantwort: Da wechselst du am besten zu C# und öffnest ein Windows Form mit Input Control palaverpalaver.

:D
Als Anfänger hat man jedoch häufig noch nicht so den Durchblick wofür es Standardfunktionen gibt und wo man selbst ran muss. Da er nur geschrieben hat, dass er ein Programm schreiben wolle welches ... tut, ist nicht sicher ob er einfach ein Ergebnis haben möchte um es evtl. in einem anderen Programm einzusetzen oder ob der Weg das Ziel ist. Klar ist letzteres schon am wahrscheinlichsten, aber nicht sicher und ich finde es daher nicht so verkehrt in einem kurzen Kommentar darauf hinzuweisen. Sinnvoll wäre es natürlich gewesen auch wirklich auf eine C-Funktion zu verweisen anstatt auf Java oder C++

Hier also ein bisschen Lektüre http://www2.hs-fulda.de/~klingebiel/c-stdlib/ctype.htm
 
Zurück
Oben