Nach einer Zeichenkette (mit welchen Mitteln auch immer) zu lesen, zusätzlich zu der toupper
Funktion in ctype.h
, können Sie case-coversions von unteren bis oberen Fall (und von der oberen bis unteren machen) mit einfachen bitweisen Operationen.
Zeichenwerte
Sie werden oft den Begriff hören 7-bit ASCII. Dies liegt daran, dass der ASCII-Zeichensatz durch die ersten 7 Bits in jedem Zeichenwert dargestellt wird. (Das 8. Bit ist immer 0
für Standardzeichen.) Das 6. Bit ist das Fallbit. (für A-Za-z
) Für A-Z
ist das Fallbit0
und für a-z
ist es 1
.
char | dec | hex | binary
-----+-------+--------+---------
A | 65 | 0x41 | 01000001
B | 66 | 0x42 | 01000010
C | 67 | 0x43 | 01000011
D | 68 | 0x44 | 01000100
...
a | 97 | 0x61 | 01100001
b | 98 | 0x62 | 01100010
c | 99 | 0x63 | 01100011
d | 100 | 0x64 | 01100100
Um von Klein zu ändern-Groß-, alles, was erforderlich ist, prüft man sicher sein auf a-z
und dann einfach Umlegen des 6.-Bit 1
-0
arbeiten.
#include <stdio.h>
enum { MAXC = 512 };
int main (void) {
char str[MAXC] = "";
char *p = str;
printf ("\n enter str: ");
if (!fgets (str, MAXC, stdin)) {
fprintf (stderr, "error: invalid input.\n");
return 1;
}
for (; *p; p++) /* for each character */
if ('a' <= *p && *p <= 'z') /* if lower-case */
*p ^= (1 << 5); /* set case bit upper */
printf (" uc-string: %s\n", str);
return 0;
}
Beispiel Verwendung/Output
$ ./bin/str2upper
enter str: This is A String with UPPPER and lower case.
uc-string: THIS IS A STRING WITH UPPPER AND LOWER CASE.
:
In Ihrem Fall eine Zeichenfolge aus stdin
zu lesen und dann alle Kleinbuchstaben in Großbuchstaben zu ändern, kann wie folgt durchgeführt werden
Schauen Sie vorbei und lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben.
Sie können mit 'fgets' keine Zeichenfolge in Großbuchstaben lesen oder schreiben.Sie können eine Zeichenfolge in einen Puffer lesen und dann die Zeichen im Puffer in Großbuchstaben usw. ändern. –
Beachten Sie, dass Sie, wenn die Zeile kürzer als 49 Zeichen ist, zwei Zeilenfolgen ausgeben (eine aus der gelesenen Zeichenfolge) 'fgets()', eins hinzugefügt durch 'puts()'). Es wird wahrscheinlich nichts ausmachen, aber Sie sollten sich dessen bewusst sein. –