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

C標準庫參考指南(2):ctype.h 字符分類與轉換函數完整手冊

     編輯:關於C語言

前言:ctype.h——字符層面的「守門員」

ctype.h 提供字符測試 (is...) 與大小寫轉換 (to...) 函數,參數為 int (需可表示 unsigned char 和 EOF),返回 int (非零真/零假)。本文系統整理所有函數判斷條件、ASCII 碼對應表、轉換規則、實戰代碼、避坑指南 (負值/簽名陷阱)。

一、 字符測試函數 is... 完整條件表

函數判斷條件 (真返回非零)ASCII 範圍
isalnum字母 (A-Z/a-z) 或數字 (0-9)0x41-0x5A, 0x61-0x7A, 0x30-0x39
isalpha字母 (A-Z/a-z)0x41-0x5A, 0x61-0x7A
iscntrl控制字符0x00-0x1F, 0x7F (DEL)
isdigit阿拉伯數字 (0-9)0x30-0x39
isgraph可打印非空格字符0x21-0x7E
islower小寫字母 (a-z)0x61-0x7A
isprint可打印字符 (含空格)0x20-0x7E
ispunct標點符號 (可打印非字母數字空格)0x21-0x2F, 0x3A-0x40, 0x5B-0x60, 0x7B-0x7E
isspace空白字符空格(0x20), \t(0x09), \n(0x0A), \v(0x0B), \f(0x0C), \r(0x0D)
isupper大寫字母 (A-Z)0x41-0x5A
isxdigit十六進制數字 (0-9, A-F, a-f)0x30-0x39, 0x41-0x46, 0x61-0x66

二、 大小寫轉換函數 to...

函數轉換規則
tolower若為大寫字母 (A-Z),轉對應小寫 (a-z);否則原值返回。
toupper若為小寫字母 (a-z),轉對應大寫 (A-Z);否則原值返回。

三、 關鍵避坑指南

  1. 參數必須轉換為 unsigned char 或 EOF:
    char c = getchar();
    // 錯誤:若 char 有符號且 c < 0,行為未定義
    // 正確:
    int ch = (unsigned char)c;
    if (isalpha(ch)) ...
    鐵律:ctype.h 函數參數永遠寫 (unsigned char)c 或存入 int 變量。
  2. Locale 影響:setlocale(LC_CTYPE, ...) 改變字符分類結果 (如德語 ß、法語 é)。解析協議/固定格式**必須**鎖定 "C" 語言環境。
  3. 不可用於多字節字符:UTF-8 中文佔 3 字節,逐字節 isalpha 無意義。寬字符用 wctype.h (iswalpha 等)。

四、 實戰代碼:字符串全轉小寫

#include <ctype.h>
#include <stdio.h>
#include <string.h>

int main(void) {
    char string[] = "THIS IS A TEST";
    for (size_t i = 0; i < strlen(string); i++) {
        string[i] = tolower((unsigned char)string[i]); // 關鍵轉換
    }
    printf("%s\n", string); // 輸出: this is a test
    return 0;
}

五、 總結

ctype.h 是字符處理的基石:**參數轉 unsigned char、注意 Locale、多字節用寬字符版**。熟記 11 個 is... 條件表、to... 規則、ASCII 碼分布,能快速編寫健壯的字符解析、驗證、轉換代碼。

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