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;
}

这个程序首先提示用户输入一段英文文本,然后遍历这段文本中的每个字符,根据字符的类型分别统计字母、数字、空格、标点和其他字符的数量,并最后输出结果。

C++编程语言基础

ASCII码表及C++字符函数库(cctype)