ASCII码表及C++字符函数库(cctype)
ASCII(American Standard Code for Information Interchange)码表是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准。ASCII 码表用特定的整数来表示各种字符,包括字母、数字、标点符号、控制字符等。以下是常见的 ASCII 码表内容:
1. 控制字符(0-31以及127):
0(NUL,空字符):表示一个空操作或字符串的结束标志。 1(SOH,标题起始):在一些通信协议中用于表示标题的开始。 7(BEL,铃):会使计算机发出提示音。 8(BS,退格):在文本编辑中用于将光标向左移动一格并删除原位置的字符。 9(HT,水平制表栏):用于在文本中进行水平制表,使光标移动到下一个制表位。 10(LF,换行):使光标移动到下一行的开头。 13(CR,回车):使光标回到当前行的开头。 27(ESC,换码符):用于改变后续字符的解释方式,在一些特定的控制序列中使用。 127(DEL,擦掉):表示删除字符。
2. 特殊和数字字符(32-126):
32(SP,空格):用于在文本中分隔单词和字符。 48-57:分别对应数字 0-9。 65-90:对应大写英文字母 A-Z。 97-122:对应小写英文字母 a-z。
其他字符如 !、@、#、$、%、& 等标点符号和特殊字符也在这个范围内。
总的来说,ASCII 码表定义了 128 个字符的编码,其中 0-127 是标准的 ASCII 码,每个字符都有唯一对应的整数值。在计算机系统中,文本信息通常以 ASCII 码的形式存储和传输,使得不同的计算机系统能够正确地识别和处理文本数据。
3. <cctype>头文件
<cctype>头文件中包含了多种用于字符处理的函数,以下是一些常见的函数:
isalnum(int c) :判断字符 c 是否是字母或数字。如果是字母(小写或大写)或数字( '0' 到 '9' ),则返回一个非零值(通常是 1 );如果不是字母或数字,即是标点符号、空白字符或其他特殊字符,则返回 0 。例如:
#include <iostream> #include <cctype> int main() { char c = 'A'; if (isalnum(c)) { std::cout << c << " 是字母或数字" << std::endl; } else { std::cout << c << " 不是字母或数字" << std::endl; } return 0; }
isalpha(int c) :判断字符 c 是否是字母。如果是大写或小写字母,则返回非零值;否则返回 0 。例如:
#include <iostream> #include <cctype> int main() { char c = '5'; if (isalpha(c)) { std::cout << c << " 是字母" << std::endl; } else { std::cout << c << " 不是字母" << std::endl; } return 0; }
iscntrl(int c) :判断字符 c 是否是控制字符。对于标准 ASCII 字符集,控制字符是 ASCII 码 0x00 (NUL)到 0x1F (US)之间以及 0x7F (DEL)的字符。如果是控制字符,则返回非零值;否则返回 0 。例如,换行符 ' ' 不是控制字符,而 ASCII 值为 0x07 (BEL,响铃字符)是控制字符。
isdigit(int c) :判断字符 c 是否是数字字符,即是否是 '0' 到 '9' 中的一个。如果是数字字符,则返回非零值;否则返回 0 。例如:
#include <iostream> #include <cctype> int main() { char c = '8'; if (isdigit(c)) { std::cout << c << " 是数字" << std::endl; } else { std::cout << c << " 不是数字" << std::endl; } return 0; }
isgraph(int c) :判断字符 c 是否是除空格之外的打印字符。打印字符是指可以在屏幕上显示的字符,包括字母、数字、标点符号等。如果是除空格之外的打印字符,则返回非零值;否则返回 0 。例如,字母 'A' 是打印字符,空格 ' ' 不是(因为该函数排除了空格)。
islower(int c) :判断字符 c 是否是小写字母。如果是小写字母(在默认的“C”语言环境中,如 a 到 z ),则返回非零值;否则返回 0 。例如:
#include <iostream> #include <cctype> int main() { char c = 'b'; if (islower(c)) { std::cout << c << " 是小写字母" << std::endl; } else { std::cout << c << " 不是小写字母" << std::endl; } return 0; }
isprint(int c) :判断字符 c 是否是打印字符(包括空格)。如果是可以在屏幕上显示的字符(包括空格),则返回非零值;否则返回 0 。例如,字母 'A' 、数字 '5' 和空格 ' ' 都是打印字符。
ispunct(int c) :判断字符 c 是否是标点符号。标准的“C”语言环境认为标点字符是非字母数字且具有图形表示的字符(除了空格字符)。如果是标点符号,则返回非零值;否则返回 0 。例如,逗号 '' 、句号 '.' 等是标点符号。
isspace(int c) :判断字符 c 是否为空白字符。在“C”语言环境中,空白字符包括空格( ' ' ,ASCII 值为 32)、制表符( ' ' ,ASCII 值为 9)、换行符( ' ' ,ASCII 值为 10)、垂直制表符( '' ,ASCII 值为 11)、换页符( '' ,ASCII 值为 12)和回车符( ' ' ,ASCII 值为 13)。如果是空白字符,则返回非零值;否则返回 0 。
isupper(int c) :判断字符 c 是否是大写字母。如果是大写字母(在默认的“C”语言环境中,如 A 到 Z ),则返回非零值;否则返回 0 。例如:
#include <iostream> #include <cctype> int main() { char c = 'C'; if (isupper(c)) { std::cout << c << " 是大写字母" << std::endl; } else { std::cout << c << " 不是大写字母" << std::endl; } return 0; }
isxdigit(int c) :判断字符 c 是否是十六进制数字字符。十六进制数字是 '0' 到 '9' 、 'a' 到 'f' 以及 'A' 到 'F' 中的一个。如果是十六进制数字字符,则返回非零值;否则返回 0 。例如:
#include <iostream> #include <cctype> int main() { char c = 'A'; if (isxdigit(c)) { std::cout << c << " 是十六进制数字" << std::endl; } else { std::cout << c << " 不是十六进制数字" << std::endl; } return 0; }
tolower(int c) :如果参数 c 是大写字符,则返回其对应的小写字符;如果参数不是大写字符,则返回该参数本身。例如:
#include <iostream> #include <cctype> int main() { char c = 'B'; char lowerC = tolower(c); std::cout << lowerC << std::endl; // 输出 'b' return 0; }
toupper(int c) :如果参数 c 是小写字符,则返回其对应的大写字符;如果参数不是小写字符,则返回该参数本身。例如:
#include <iostream> #include <cctype> int main() { char c = 'd'; char upperC = toupper(c); std::cout << upperC << std::endl; // 输出 'D' return 0; }
综合运用:统计一段英文中各类字符数量:
#include <iostream> #include <cctype> using namespace std; int main() { string text; cout << "请输入一段英文文本:"; getline(cin, text); //与cin输入操作符(>>)不同,getline函数会读取一整行,包括空格字符。 int letterCount = 0; int digitCount = 0; int spaceCount = 0; int punctCount = 0; int otherCount = 0; for (char c : text) { if (isalpha(c)) { letterCount++; } else if (isdigit(c)) { digitCount++; } else if (isspace(c)) { spaceCount++; } else if (ispunct(c)) { punctCount++; } else { otherCount++; } } cout << "字母数量:" << letterCount << endl; cout << "数字数量:" << digitCount << endl; cout << "空格数量:" << spaceCount << endl; cout << "标点数量:" << punctCount << endl; cout << "其他字符数量:" << otherCount << endl; return 0; }
这个程序首先提示用户输入一段英文文本,然后遍历这段文本中的每个字符,根据字符的类型分别统计字母、数字、空格、标点和其他字符的数量,并最后输出结果。