1?isalnum() 函數
1.1 函數原型
#include <ctype.h>int isalnum(int c);
1.2 功能說明
????????isalnum() 函數用于檢查傳入的整數參數是否為 ASCII 編碼的字母或數字字符('A' - 'Z'、'a' - 'z'、'0' - '9',對應 ASCII 值 65 - 90、97 - 122、48 - 57)。
-
參數:
-
c 表示要檢查的字符,以 int 形式傳遞(通常是 char 類型轉換而來的 ASCII 碼值)。
-
-
返回值:
- 如果 c 是字母或數字字符,返回非零值(通常是 1,表示真)。
- 如果 c 不是字母或數字字符,返回 0(表示假)。
1.3 注意事項
-
頭文件依賴:
-
使用 isalnum() 函數前,必須包含 <ctype.h> 頭文件,否則編譯器可能無法識別該函數,導致編譯錯誤或鏈接失敗。
-
-
參數范圍限制:
- 雖然函數參數類型為?int,但實際應傳遞?unsigned char?類型的值或?EOF(通常用于文件操作結束標志)。
- 如果傳入的值超出?unsigned char?范圍(0 - 255)或?EOF,函數的行為是未定義的(可能導致程序崩潰或返回錯誤結果)。
- 例如:直接傳遞負的 char 值(如 -1)或大于 127 的值時,函數會返回 0。
-
區域設置依賴:
- isalnum() 的行為受區域設置(locale)影響,但在默認的 "C" 區域設置中,僅識別 ASCII 字母和數字字符。
- 如果程序依賴其他區域設置(如非 ASCII 編碼),可能需要使用其他函數或手動處理。
1.4 應用場景
-
用戶輸入驗證:在用戶注冊或登錄時,檢查用戶名或密碼是否僅包含字母和數字(例如,不允許特殊字符)。
-
數據過濾:在處理用戶提交的表單數據時,過濾掉非字母或數字的字符(例如,清理電話號碼中的空格或連字符)。
-
字符串解析:在解析命令行參數或配置文件時,確保參數僅包含有效字符(例如,文件名或標識符)。
-
游戲開發:在驗證玩家輸入的昵稱或聊天消息時,限制字符類型(例如,防止使用特殊字符或表情符號)。
1.5 示例程序
#include <stdio.h>
#include <ctype.h> // 引入 ctype.h 頭文件以使用 isalnum 函數int main()
{char str[] = "Hello123!@#"; // 包含字母、數字和符號的字符串printf("字符串 \"%s\" 中的字母或數字字符:\n", str);for (int i = 0; str[i] != '\0'; i++){if (isalnum(str[i])){printf("'%c' 是字母或數字字符\n", str[i]);}else{printf("'%c' 不是字母或數字字符\n", str[i]);}}// 檢查單個字符char ch = '7';if (isalnum(ch)){printf("\n'%c' 是一個字母或數字字符\n", ch);}else{printf("\n'%c' 不是一個字母或數字字符\n", ch);}return 0;
}
????????程序在 VS Code 中的運行結果如下所示:
2?isalpha() 函數
2.1 函數原型
#include <ctype.h>int isalpha(int c);
2.2 功能說明
????????isalpha() 函數用于檢查傳入的整數參數是否為 ASCII 編碼的字母字符('A' - 'Z' 或 'a' - 'z',對應 ASCII 值 65 - 90、97 - 122)。
-
參數:
-
c 表示要檢查的字符,以 int 形式傳遞(通常是 char 類型轉換而來的 ASCII 碼值)。
-
-
返回值:
- 如果?c?是字母字符(大寫或小寫),返回非零值(通常是?1,表示真)。
- 如果?c?不是字母字符(如數字、符號、空格等),返回?0(表示假)。
2.3 注意事項
-
頭文件依賴:
-
使用 isalpha() 函數前,必須包含 <ctype.h> 頭文件,否則編譯器可能無法識別該函數,導致編譯錯誤或鏈接失敗。
-
-
參數范圍限制:
- 雖然函數參數類型為 int,但實際應傳遞 unsigned char 類型的值或 EOF(通常用于文件操作結束標志)。
- 如果傳入的值超出 unsigned char 范圍(0 - 255)或 EOF,函數的行為是未定義的(可能導致程序崩潰或返回錯誤結果)。
- 例如:直接傳遞負的 char 值(如 -1)或大于 127 的值時,函數會返回 0。
-
區域設置依賴:
- isalpha() 的行為受區域設置(locale)影響,但在默認的 "C" 區域設置中,僅識別 ASCII 字母字符。
- 如果程序依賴其他區域設置(如非 ASCII 編碼,如帶重音符號的字母),可能需要使用其他函數或手動處理。
2.4 應用場景
-
輸入驗證:確保用戶輸入的敏感信息(如姓名、密碼)僅包含字母,避免數字或符號導致程序異常。
-
字符串處理:從混合字符串(如 "Name: Alice123")中提取或統計字母字符,便于后續處理(如大小寫轉換、格式化輸出)。
-
數據清洗:在文本分析或數據預處理時,移除非字母字符(如數字、標點符號),保留有效文本內容。
-
詞法分析:在編譯器開發中,識別代碼中的標識符(如變量名 count),為語法分析階段提供基礎。
2.5 示例程序
#include <stdio.h>
#include <ctype.h> // 引入 ctype.h 頭文件以使用 isalpha 函數int main()
{char str[] = "Hello123!@#"; // 包含字母、數字和符號的字符串printf("字符串 \"%s\" 中的字母字符:\n", str);for (int i = 0; str[i] != '\0'; i++){if (isalpha(str[i])){printf("'%c' 是字母字符\n", str[i]);}else{printf("'%c' 不是字母字符\n", str[i]);}}// 檢查單個字符char ch = 'G';if (isalpha(ch)){printf("\n'%c' 是一個字母字符\n", ch);}else{printf("\n'%c' 不是一個字母字符\n", ch);}return 0;
}
????????程序在 VS Code 中的運行結果如下所示:
3 iscntrl() 函數
3.1 函數原型
#include <ctype.h>int iscntrl(int c);
3.2 功能說明
????????iscntrl() 函數用于檢查傳入的整數參數是否為 ASCII 編碼的控制字符(Control Character)。控制字符是不可見的字符,通常用于終端控制、通信協議或文件格式中的特殊操作(如換行符 \n、制表符 \t、響鈴符 \a 等)。
-
參數:
-
c 表示要檢查的字符,以 int 形式傳遞(通常是 char 類型轉換而來的 ASCII 碼值)。
-
-
返回值:
- 如果 c 是控制字符(ASCII 值 0 - 31 或 127),返回非零值(通常是 1,表示真)。
- 如果 c 不是控制字符(如可打印字符、空格等),返回 0(表示假)。
3.3 注意事項
-
頭文件依賴:
-
使用 iscntrl() 函數前,必須包含 <ctype.h> 頭文件,否則編譯器可能無法識別該函數,導致編譯錯誤或鏈接失敗。
-
-
參數范圍限制:
- 雖然函數參數類型為?int,但實際應傳遞?unsigned char?類型的值或?EOF(通常用于文件操作結束標志)。
- 如果傳入的值超出?unsigned char?范圍(0 - 255)或?EOF,函數的行為是未定義的(可能導致程序崩潰或返回錯誤結果)。
- 例如:直接傳遞負的 char 值(如 -1)或大于 127 的值時,函數會返回 0。
-
區域設置依賴:
- iscntrl() 的行為受區域設置(locale)影響,但在默認的 "C" 區域設置中,僅識別 ASCII 控制字符。
- 如果程序依賴其他區域設置(如非 ASCII 編碼),可能需要使用其他函數或手動處理。
3.4 應用場景
-
輸入驗證:檢測輸入流中是否包含控制字符(如終端輸入或文件讀取),避免控制字符干擾程序邏輯。
-
數據清洗:在文本處理或日志分析時,移除控制字符(如 \n、\t),保留可打印字符以提升數據可讀性。
-
協議解析:在通信協議(如串口通信、網絡協議)中,識別控制字符以執行特定操作(如換行、響鈴)。
-
二進制文件處理:在解析二進制文件時,區分控制字符和普通數據,確保文件格式正確。
3.5 示例程序
#include <stdio.h>
#include <ctype.h> // 引入 ctype.h 頭文件以使用 iscntrl 函數int main()
{char str[] = "Hello\tW\to\a!"; // 包含控制字符(制表符、響鈴符)的字符串printf("字符串 \"%s\" 中的控制字符:\n", str);for (int i = 0; str[i] != '\0'; i++){if (iscntrl(str[i])){printf("字符'%c'(ASCII:%d)是控制字符\n", str[i], str[i]);}else{printf("字符'%c'(ASCII:%d)不是控制字符\n", str[i], str[i]);}}// 檢查單個字符char ch = '\a'; // 響鈴符(ASCII 7)if (iscntrl(ch)){printf("\n字符'%c'(ASCII:%d)是一個控制字符\n", ch, ch);}else{printf("\n字符'%c'(ASCII:%d)不是一個控制字符\n", ch, ch);}return 0;
}
????????程序在 VS Code 中的運行結果如下所示:
4?isprint() 函數
4.1 函數原型
#include <ctype.h>int isprint(int c);
4.2 功能說明
????????isprint() 函數用于檢查傳入的整數參數是否為 ASCII 編碼的可打印字符(Printable Character)。可打印字符包括字母、數字、標點符號、空格(ASCII 值 32 - 126),但不包括控制字符(如 \n、\t)或不可見字符。
-
參數:
-
c 表示要檢查的字符,以 int 形式傳遞(通常是 char 類型轉換而來的 ASCII 碼值)。
-
-
返回值:
- 如果?c?是可打印字符(ASCII 值 32-126),返回非零值(通常是?1,表示真)。
- 如果?c?不是可打印字符(如控制字符、刪除符?\x7F),返回?0(表示假)。
4.3 注意事項
-
頭文件依賴:
-
使用 isprint() 函數前,必須包含 <ctype.h> 頭文件,否則編譯器可能無法識別該函數,導致編譯錯誤或鏈接失敗。
-
-
參數范圍限制:
- 雖然函數參數類型為 int,但實際應傳遞 unsigned char 類型的值或 EOF(通常用于文件操作結束標志)。
- 如果傳入的值超出 unsigned char 范圍(0 - 255)或 EOF,函數的行為是未定義的(可能導致程序崩潰或返回錯誤結果)。
- 例如:直接傳遞負的 char 值(如 -1)或大于 127 的值時,函數會返回 0。
-
區域設置依賴:
- isprint() 的行為受區域設置(locale)影響,但在默認的 "C" 區域設置中,僅識別 ASCII 可打印字符。
- 如果程序依賴其他區域設置(如非 ASCII 編碼),可能需要使用其他函數或手動處理。
4.4 應用場景
-
輸入驗證:確保用戶輸入的敏感信息(如密碼、用戶名)僅包含可打印字符,避免控制字符導致程序異常。
-
數據清洗:在文本處理或日志分析時,移除不可打印字符(如控制字符),保留有效內容以提升數據可讀性。
-
協議解析:在通信協議(如串口通信、網絡協議)中,驗證接收到的數據是否為可打印字符,避免非法字符干擾。
-
二進制文件處理:在解析文本文件時,區分可打印字符和二進制數據,確保文件內容正確。
4.5 示例程序
#include <stdio.h>
#include <ctype.h> // 引入 ctype.h 頭文件以使用 isprint 函數int main()
{char str[] = "He\nWo\t!\a"; // 包含控制字符(換行符、制表符、響鈴符)的字符串printf("字符串 \"%s\" 中的可打印字符:\n", str);for (int i = 0; str[i] != '\0'; i++){if (isprint(str[i])){printf("字符 %d ('%c') 是可打印字符\n", str[i], str[i]);}else{printf("字符 %d ('%c') 不是可打印字符\n", str[i], str[i]);}}// 檢查單個字符char ch = ' '; // 空格(ASCII 32)if (isprint(ch)){printf("\n字符 %d ('%c') 是一個可打印字符\n", ch, ch);}else{printf("\n字符 %d ('%c') 不是一個可打印字符\n", ch, ch);}return 0;
}
????????程序在 VS Code 中的運行結果如下所示:
5 isgraph() 函數
5.1 函數原型
#include <ctype.h>int isgraph(int c);
5.2 功能說明
????????isgraph() 函數用于檢查傳入的整數參數是否為 ASCII 編碼的圖形字符(Graphic Character)。圖形字符是可打印字符(ASCII 值 33 - 126),但不包括空格(ASCII 值 32)。這意味著 isgraph() 僅識別字母、數字、標點符號等非空格的可打印字符。
-
參數:
-
c 表示要檢查的字符,以 int 形式傳遞(通常是 char 類型轉換而來的 ASCII 碼值)。
-
-
返回值:
- 如果?c?是圖形字符(ASCII 值 33-126),返回非零值(通常是?1,表示真)。
- 如果?c?不是圖形字符(如空格、控制字符、刪除符?\x7F),返回?0(表示假)。
5.3 注意事項
-
頭文件依賴:
-
使用 isgraph() 函數前,必須包含 <ctype.h> 頭文件,否則編譯器可能無法識別該函數,導致編譯錯誤或鏈接失敗。
-
-
參數范圍限制:
- 雖然函數參數類型為?int,但實際應傳遞?unsigned char?類型的值或?EOF(通常用于文件操作結束標志)。
- 如果傳入的值超出?unsigned char?范圍(0 - 255)或?EOF,函數的行為是未定義的(可能導致程序崩潰或返回錯誤結果)。
- 例如:直接傳遞負的 char 值(如 -1)或大于 127 的值時,函數會返回 0。
-
區域設置依賴:
- isgraph() 的行為受區域設置(locale)影響,但在默認的 "C" 區域設置中,僅識別 ASCII 圖形字符。
- 如果程序依賴其他區域設置(如非 ASCII 編碼),可能需要使用其他函數或手動處理。
5.4 應用場景
-
輸入驗證:確保用戶輸入的敏感信息(如密碼、驗證碼)僅包含非空格的可打印字符,避免無效字符干擾程序邏輯。
-
數據清洗:在文本處理或日志分析時,移除空格或不可打印字符(如控制字符),保留有效內容以提升數據可讀性。
-
協議解析:在通信協議(如串口通信、網絡協議)中,驗證接收到的數據是否為非空格的可打印字符,避免非法字符干擾。
-
格式化輸出:在生成格式化文本(如表格、報告)時,確保輸出內容不包含空格或控制字符,提升輸出質量。
5.5 示例程序
#include <stdio.h>
#include <ctype.h> // 引入 ctype.h 頭文件以使用 isgraph 函數int main()
{char str[] = "He\nWo\t!"; // 包含控制字符(換行符、制表符)的字符串printf("字符串 \"%s\" 中的圖形字符:\n", str);for (int i = 0; str[i] != '\0'; i++){if (isgraph(str[i])){printf("字符 %d ('%c') 是圖形字符\n", str[i], str[i]);}else{printf("字符 %d ('%c') 不是圖形字符\n", str[i], str[i]);}}// 檢查單個字符char ch = ' '; // 空格(ASCII 32)if (isgraph(ch)){printf("\n字符 %d ('%c') 是一個圖形字符\n", ch, ch);}else{printf("\n字符 %d ('%c') 不是一個圖形字符\n", ch, ch);}return 0;
}
????????程序在 VS Code 中的運行結果如下所示:
6?ispunct() 函數
6.1 函數原型
#include <ctype.h>int ispunct(int c);
6.2 功能說明
????????ispunct() 函數用于檢查傳入的整數參數是否為 ASCII 編碼的標點符號(Punctuation Character)。標點符號是可打印字符(ASCII 值 33-126)中不屬于字母、數字或空格的字符,例如 ,、.、!、?、; 等。
-
參數:
-
c 表示要檢查的字符,以 int 形式傳遞(通常是 char 類型轉換而來的 ASCII 碼值)。
-
-
返回值:
- 如果?c?是標點符號(ASCII 值 33-126 中非字母、非數字、非空格的字符),返回非零值(通常是?1,表示真)。
- 如果?c?不是標點符號(如字母、數字、空格、控制字符),返回?0(表示假)。
6.3 注意事項
-
頭文件依賴:
-
使用 ispunct() 函數前,必須包含 <ctype.h> 頭文件,否則編譯器可能無法識別該函數,導致編譯錯誤或鏈接失敗。
-
-
參數范圍限制:
- 雖然函數參數類型為?int,但實際應傳遞?unsigned char?類型的值或?EOF(通常用于文件操作結束標志)。
- 如果傳入的值超出?unsigned char?范圍(0 - 255)或?EOF,函數的行為是未定義的(可能導致程序崩潰或返回錯誤結果)。
- 例如:直接傳遞負的 char 值(如 -1)或大于 127 的值時,函數會返回 0。
-
區域設置依賴:
- ispunct() 的行為受區域設置(locale)影響,但在默認的 "C" 區域設置中,僅識別 ASCII 標點符號。
- 如果程序依賴其他區域設置(如非 ASCII 編碼),可能需要使用其他函數或手動處理。
6.4 應用場景
-
文本解析:在自然語言處理或文本分析中,識別句子邊界(如 !、?)或分隔符(如 ,、;),輔助語法分析。
-
輸入驗證:確保用戶輸入的特定字段(如密碼、用戶名)不包含非法標點符號,避免程序邏輯錯誤。
-
數據清洗:在日志分析或數據預處理時,移除或替換標點符號,保留有效內容以提升數據可讀性。
-
格式化輸出:在生成格式化文本(如表格、報告)時,控制標點符號的使用,確保輸出符合規范。
6.5 示例程序
#include <stdio.h>
#include <ctype.h> // 引入 ctype.h 頭文件以使用 ispunct 函數int main()
{char str[] = "Hi! How? !,./"; // 包含標點符號的字符串printf("字符串 \"%s\" 中的標點符號:\n", str);for (int i = 0; str[i] != '\0'; i++){if (ispunct(str[i])){printf("字符 %d ('%c') 是標點符號\n", str[i], str[i]);}else{printf("字符 %d ('%c') 不是標點符號\n", str[i], str[i]);}}// 檢查單個字符char ch = '.'; // 標點符號(ASCII 46)if (ispunct(ch)){printf("\n'%c' 是一個標點符號\n", ch);}else{printf("\n'%c' 不是一個標點符號\n", ch);}return 0;
}
????????程序在 VS Code 中的運行結果如下所示:
7?isspace() 函數
7.1 函數原型
#include <ctype.h>int isspace(int c);
7.2 功能說明
????????isspace() 函數用于檢查傳入的整數參數是否為 ASCII 編碼的空白字符(Whitespace Character)。空白字符包括空格( )、換行符(\n)、制表符(\t)、回車符(\r)、垂直制表符(\v)和換頁符(\f)。
-
參數:
-
c 表示要檢查的字符,以 int 形式傳遞(通常是 char 類型轉換而來的 ASCII 碼值)。
-
-
返回值:
- 如果?c?是空白字符(ASCII 值 9、10、11、12、13、32),返回非零值(通常是?1,表示真)。
- 如果?c?不是空白字符(如字母、數字、標點符號),返回?0(表示假)。
7.3 注意事項
-
頭文件依賴:
-
使用 isspace() 函數前,必須包含 <ctype.h> 頭文件,否則編譯器可能無法識別該函數,導致編譯錯誤或鏈接失敗。
-
-
參數范圍限制:
- 雖然函數參數類型為?int,但實際應傳遞?unsigned char?類型的值或?EOF(通常用于文件操作結束標志)。
- 如果傳入的值超出?unsigned char?范圍(0 - 255)或?EOF,函數的行為是未定義的(可能導致程序崩潰或返回錯誤結果)。
- 例如:直接傳遞負的 char 值(如 -1)或大于 127 的值時,函數會返回 0。
-
區域設置依賴:
- isspace() 的行為受區域設置(locale)影響,但在默認的 "C" 區域設置中,僅識別 ASCII 空白字符。
- 如果程序依賴其他區域設置(如非 ASCII 編碼),可能需要使用其他函數或手動處理。
7.4 應用場景
-
文本解析:在自然語言處理或文本分析中,識別句子或段落分隔符(如換行符、制表符),輔助語法分析。
-
輸入驗證:確保用戶輸入的特定字段(如用戶名、密碼)不包含非法空白字符,避免程序邏輯錯誤。
-
數據清洗:在日志分析或數據預處理時,移除或替換多余的空白字符,保留有效內容以提升數據可讀性。
-
格式化輸出:在生成格式化文本(如表格、報告)時,控制空白字符的使用,確保輸出符合規范。
7.5 示例程序
#include <stdio.h>
#include <ctype.h> // 引入 ctype.h 頭文件以使用 isspace 函數int main()
{char str[] = "He l\nW d\t!"; // 包含空白字符的字符串printf("字符串 \"%s\" 中的空白字符:\n", str);for (int i = 0; str[i] != '\0'; i++){if (isspace(str[i])){printf("字符 %d ('%c') 是空白字符\n", str[i], str[i]);}else{printf("字符 %d ('%c') 不是空白字符\n", str[i], str[i]);}}// 檢查單個字符char ch = ' '; // 空格(ASCII 32)if (isspace(ch)){printf("\n'%c' 是一個空白字符\n", ch);}else{printf("\n'%c' 不是一個空白字符\n", ch);}return 0;
}
????????程序在 VS Code 中的運行結果如下所示:
8?字符處理函數總結
函數名 | 功能描述 | 輸入類型 | 返回值類型 | 返回值說明 |
---|---|---|---|---|
isalnum | 檢查字符是否為字母或數字(a-z, A-Z, 0-9) | int(字符的 ASCII 值) | int | 非零值(真)如果字符是字母或數字,否則 0(假) |
isalpha | 檢查字符是否為字母(a-z, A-Z) | int(字符的 ASCII 值) | int | 非零值(真)如果字符是字母,否則 0(假) |
iscntrl | 檢查字符是否為控制字符(如換行符、制表符等,ASCII 0-31 和 127) | int(字符的 ASCII 值) | int | 非零值(真)如果字符是控制字符,否則 0(假) |
isprint | 檢查字符是否為可打印字符(ASCII 32-126) | int(字符的 ASCII 值) | int | 非零值(真)如果字符是可打印字符,否則 0(假) |
isgraph | 檢查字符是否為圖形字符(可打印且非空格字符,ASCII 33-126) | int(字符的 ASCII 值) | int | 非零值(真)如果字符是圖形字符,否則 0(假) |
ispunct | 檢查字符是否為標點符號(如 !, ", #, $, %, 等) | int(字符的 ASCII 值) | int | 非零值(真)如果字符是標點符號,否則 0(假) |
isspace | 檢查字符是否為空白字符(如空格、制表符、換行符等) | int(字符的 ASCII 值) | int | 非零值(真)如果字符是空白字符,否則 0(假) |
- 這些函數都定義在 <ctype.h> 頭文件中。
- 輸入參數通常是字符的 ASCII 值(即 int 類型),但通常通過傳遞字符(如 'a')來隱式轉換。
- 返回值類型為 int,通常用于布爾判斷(非零為真,0 為假)。
- isalnum 是 isalpha 和 isdigit 的組合,檢查字符是否為字母或數字。
- isgraph 和 isprint 的區別在于 isgraph 不包括空格字符(ASCII 32),而 isprint 包括。
- isspace 檢查的空白字符包括空格、制表符(\t)、換行符(\n)、回車符(\r)、垂直制表符(\v)和換頁符(\f)。?