1. 程式人生 > 其它 >C語言處理英文字元

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 碼。

無論在哪個字符集中,字元編號都是一個整數;從這個角度考慮,字元型別和整數型別本質上沒有什麼區別。

我們可以給字元型別賦值一個整數,或者以整數的形式輸出字元型別。反過來,也可以給整數型別賦值一個字元,或者以字元的形式輸出整數型別。

請看下面的例子:

  • #include <stdio.h>
  • 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, 69
b: 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 函式輸出。

完整的字串演示:

  • #include <stdio.h>
  • 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;
  • }