Forum: PC-Programmierung C- toupper()


von max .. (vbc2011)


Lesenswert?

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!!

von max .. (vbc2011)


Lesenswert?

ah problem gelöst:)

die fehlende zeile muss lauten:

sprintf( temp, "%c", c );

von Sven P. (Gast)


Lesenswert?

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.

von us73 (Gast)


Lesenswert?

Ähm:
Warum sprintf() nehmen ???
Das ist wohl Overkill.

Einfacher:
temp[0] = c;

von us73 (Gast)


Lesenswert?

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.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

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 ...

von DirkB (Gast)


Lesenswert?

Random ... schrieb:
> könnte so funktionieren ...

Nö.

Was machst du mit dem ersten Zeichen?

von Random .. (thorstendb) Benutzerseite


Lesenswert?

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 :-)

von ... (Gast)


Lesenswert?

Du hast die Umlaute vergessen :)

von Andreas B. (andreas_b77)


Lesenswert?

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.

von D. I. (Gast)


Lesenswert?

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);

von Sven P. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.