Hallo, ich möchte kleinbuchstaben in GRO?BUCHSTABEN wandeln. Das geht soweit auch gut mit toupper(). hier der code while( i != strlen(string) ) { c = string[i]; c = toupper(c); putchar(c); i++; } jetzt möchte ich aber die Großbuchstaben nicht auf der Konsole ausgeben, sondern in einen String schreiben um sie weiter zu verarbeiten. Wie mache ich das - das das "c" ja ein dezimal-wert (ascii) ist!!
Der String besteht doch nur aus 'ASCII-Werten':
1 | char *s; |
2 | |
3 | int i; |
4 | int len = strlen(s); |
5 | for (i = 0; i < len; i++) |
6 | s[i] = toupper(s[i]); |
Mit Zeigern gehts noch eleganter.
Sven P. schrieb: > s[i] = toupper(s[i]); Die Zuweisung geht wohl schief, ich sehe nirgends deklarierten oder allokierten Speicher, nur ein Sven P. schrieb: > char *s; Da klingelts aber lichterloh im Karton.
trocken weggehackt:
1 | void MyToUpper(char *str) |
2 | {
|
3 | if(!str) return; |
4 | |
5 | while(*str++) { |
6 | if(*str >= 'a' && *str <= 'z') *str -= 'a' - 'A'; |
7 | }
|
8 | }
|
könnte so funktionieren ...
1 | void MyToUpper(char *str) |
2 | {
|
3 | if(!str) return; |
4 | |
5 | do { |
6 | if(*str >= 'a' && *str <= 'z') *str -= 'a' - 'A'; |
7 | } while(*str++); |
8 | }
|
stimmt, mein ursprünglicher Ansatz mit der do ... while war doch besser. Das kommt davon, wenn man noch rumeditiert :-)
Und alle sonstigen, nicht-ASCII Kleinbuchstaben irgendwelcher Sprachen der Welt die auch zu Großbuchstaben werden wollen. Es ist auch etwas grenzwertig, erst zu konvertieren und dann zu testen ob es ein Null-Byte war. Funktioniert nur, weil die Konvertierung Null-Bytes unangetastet lässt.
pff das einzig wahre toUpper ;) 5. Bit löschen, für toLower 5. Bit setzen
1 | char c = 'e'; |
2 | if (c >= 'a' && c <= 'z') c &= ~(1 << 5); |
us73 schrieb: > Da klingelts aber lichterloh im Karton. Hast du mal überlegt, dass die Zeichenkette auch irgendwo her kommen muss? Ich bin in meinem Auszug stillschweigend genau davon ausgegangen. Ich habe aber auch nie Anspruch darauf erhoben, dass mein Schnippel vollständig ist. Er ist syntaktisch korrekt und der Kernpunkt, die Schleife nämlich, ist semantisch korrekt, denke ich. Nu is gut.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.