首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言入門

C語言大小寫字母轉換:ASCII 碼差值 32 技巧與標準庫函式對比

     編輯:C 語言入門

ASCII 碼關鍵差值

'A' = 65 (0x41)   'a' = 97 (0x61)   差值 32 (0x20)
'Z' = 90          'z' = 122
第 6 位 (0x20) 控制大小寫:0=大寫, 1=小寫

位元操作轉換(最高效)

char to_lower_bit(char c) { return c | 0x20; }   // 大寫→小寫
char to_upper_bit(char c) { return c & ~0x20; }  // 小寫→大寫
// 原理:設定/清除第 6 位
// 注意:僅對字母有效,非字母字元會產生非預期結果

算術操作轉換(教學常用)

char to_lower_arith(char c) {
    if (c >= 'A' && c <= 'Z') return c + 32;
    return c;
}
char to_upper_arith(char c) {
    if (c >= 'a' && c <= 'z') return c - 32;
    return c;
}

標準庫函式(生產環境推薦)

#include 
// int tolower(int c); int toupper(int c);
// 參數/回傳為 int(EOF 兼容),實際處理 unsigned char 轉 int
// 支援地區化(locale),非 ASCII 環境下正確

完整互動程式:逐字元轉換直到 EOF

#include 
#include 

int main() {
    int ch;
    puts("Enter text (Ctrl+Z/Ctrl+D to end):");
    while ((ch = getchar()) != EOF) {
        if (islower(ch)) putchar(toupper(ch));
        else if (isupper(ch)) putchar(tolower(ch));
        else if (isdigit(ch)) continue; // 跳過數字
        else putchar(ch);
    }
    return 0;
}

關鍵細節

細節說明
`getchar()` 回傳 `int`需用 `int ch` 接收,以便檢測 `EOF`(通常為 -1)
`ctype.h` 函式參數要求 `unsigned char` 轉 `int` 或 `EOF`,直接傳 `char` 可能負值導致 UB
`continue` 效果跳過 `putchar`,實現「忽略數字」
位元法 vs 庫函式位元法極快但僅限 ASCII;庫函式正確處理多國語系

總結

大小寫轉換核心是 **ASCII 第 6 位操作**。教學常用 `±32` 或 `|0x20`/`&~0x20` 位元技巧;實務開發**必須使用 `` `toupper`/`tolower`** 以確保跨平台、多國語系正確性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved