在ctype.h
讀一個字符串(通過任何手段),除了toupper
功能後,可以從低到大寫做出區分coversions(從上部到下部)與簡單的按位操作。
字符值
你會經常聽到這個詞7位ASCII。這是由於ASCII字符集由每個字符值中的前7位表示。 (對於標準字符,第8位總是0
)。第6位是的情況位。 (對於A-Za-z
)對於A-Z
的情況位是0
並且對於a-z
它是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
從小寫改變到大寫,所有需要的是檢查,以確保您正在運行a-z
,然後簡單地翻轉第6位從1
到0
。
在你的情況,讀取來自stdin
字符串,然後改變任何小寫字符爲大寫可以做如下:
#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;
}
實施例使用/輸出
$ ./bin/str2upper
enter str: This is A String with UPPPER and lower case.
uc-string: THIS IS A STRING WITH UPPPER AND LOWER CASE.
仔細查看,如果您有任何問題,請告訴我。
您無法使用'fgets'以全部大寫字母讀取或寫入字符串。您可以將字符串讀入緩衝區,然後將緩衝區中的字符操作爲全部大寫字母等。 –
請注意,如果行少於49個字符,則會得到兩個換行符輸出(一個來自讀取的字符串'fgets()','puts()'添加的)。這可能無關緊要,但你應該意識到這一點。 –