C語言處理英文字元
前面我們多次提到了字串,字串是多個字元的集合,它們由" "包圍,例如"http://www.baidu.com"、"嶽麓書院"。字串中的字元在記憶體中按照次序、緊挨著排列,整個字串佔用一塊連續的記憶體。
當然,字串也可以只包含一個字元,例如"A"、"6";不過為了操作方便,我們一般使用專門的字元型別來處理。
初學者經常用到的字元型別是 char,它的長度是 1,只能容納 ASCII 碼錶中的字元,也就是英文字元。
要想處理漢語、日語、韓語等英文之外的字元,就得使用其他的字元型別,char 是做不到的,我們將在下節《C語言處理中文字元》中詳細講解。
字元的表示
- 字元型別由單引號' '包圍,
- 字串由雙引號" "
下面的例子演示瞭如何給 char 型別的變數賦值:
//正確的寫法 char a = '1'; char b = '$'; char c = 'X'; char d = ' '; // 空格也是一個字元 //錯誤的寫法 char x = '中'; //char 型別不能包含 ASCII 編碼之外的字元 char y = 'A'; //A 是一個全形字元 char z = "t"; //字元型別應該由單引號包圍
說明:
- 在字符集中,全形字元和半形字元對應的編號(或者說編碼值)不同,是兩個字元;
- ASCII 編碼只定義了半形字元,沒有定義全形字元。
字元的輸出
輸出 char 型別的字元有兩種方法,分別是:
- 使用專門的字元輸出函式 putchar;
- 使用通用的格式化輸出函式 printf,char 對應的格式控制符是%c。
請看下面的演示:
#include <stdio.h> int main() { char a = '1'; char b = '$'; char c = 'X'; char d = ' '; //使用 putchar 輸出 putchar(a); putchar(d); putchar(b); putchar(d); putchar(c); putchar('\n'); //使用 printf 輸出 printf("%c %c %c\n", a, b, c); return 0; }
執行結果:
1 $ X 1 $ X
putchar 函式每次只能輸出一個字元,輸出多個字元需要呼叫多次。
字元與整數
我們知道,計算機在儲存字元時並不是真的要儲存字元實體,而是儲存該字元在字符集中的編號(也可以叫編碼值)。對於 char 型別來說,它實際上儲存的就是字元的 ASCII 碼。
無論在哪個字符集中,字元編號都是一個整數;從這個角度考慮,字元型別和整數型別本質上沒有什麼區別。
我們可以給字元型別賦值一個整數,或者以整數的形式輸出字元型別。反過來,也可以給整數型別賦值一個字元,或者以字元的形式輸出整數型別。
請看下面的例子:
- int main()
- {
- char a = 'E';
- char b = 70;
- int c = 71;
- int d = 'H';
- printf("a: %c, %d\n", a, a);
- printf("b: %c, %d\n", b, b);
- printf("c: %c, %d\n", c, c);
- printf("d: %c, %d\n", d, d);
- return 0;
- }
輸出結果:
a: E, 69b: F, 70
c: G, 71
d: H, 72
在 ASCII 碼錶中,字元 'E'、'F'、'G'、'H' 對應的編號分別是 69、70、71、72。
a、b、c、d 實際上儲存的都是整數:
- 當給 a、d 賦值一個字元時,字元會先轉換成 ASCII 碼再儲存;
- 當給 b、c 賦值一個整數時,不需要任何轉換,直接儲存就可以;
- 當以 %c 輸出 a、b、c、d 時,會根據 ASCII 碼錶將整數轉換成對應的字元;
- 當以 %d 輸出 a、b、c、d 時,不需要任何轉換,直接輸出就可以。
可以說,是 ASCII 碼錶將英文字元和整數關聯了起來。
再談字串
前面我們講到了字串的概念,也講到了字串的輸出,但是還沒有講如何用變數儲存一個字串。其實在C語言中沒有專門的字串型別,我們只能使用陣列或者指標來間接地儲存字串。
在這裡講字串很矛盾,雖然我們暫時還沒有學到陣列和指標,無法從原理上深入分析,但是字串是常用的,又不得不說一下。所以本節我不會講解太多,大家只需要死記硬背下面的兩種表示形式即可:
- char str1[] = "http://www.cdsy.xyz";
- char *str2 = "城東書院";
str1 和 str2 是字串的名字,後邊的[ ]和前邊的*是固定的寫法。初學者暫時可以認為這兩種儲存方式是等價的,它們都可以通過專用的 puts 函式和通用的 printf 函式輸出。
完整的字串演示:
- int main()
- {
- char web_url[] = "http://www.cdsy.xyz";
- char *web_name = "城東書院";
- puts(web_url);
- puts(web_name);
- printf("%s\n%s\n", web_url, web_name);
- return 0;
- }