11 char类型与简单字符串处理

正在加载视频播放器…

GESP C++ 一级:char 类型与简单字符串处理精讲

核心目标:掌握 char 类型、字符常量、ASCII 码、字符输入输出、字符与整数转换、大小写转换、字符判断,了解字符串常量与简单字符序列处理。
char 存一个字符,本质是 ASCII 码整数;字符用单引号,字符串用双引号;大小写转换靠加减 32 或 toupper/tolower。


一、char 类型是什么

char 是字符类型,用来存储单个字符。

例如:

char c = 'A';
char d = '7';
char e = '+';

特点:

  • 只能存一个字符。
  • 字符常量用单引号 ' '。
  • 字符在内存中存的是对应的 ASCII 码(整数)。
  • char 可以和整数互相转换。

二、字符常量与字符串常量

1. 字符常量

用单引号,只能一个字符:

'A'
'7'
'+'
' '

2. 字符串常量

用双引号,可以多个字符:

"A"
"Hello"
"7"
" "

3. 区别

项目 字符常量 字符串常量
引号 单引号 ' ' 双引号 " "
内容 一个字符 零个或多个字符
示例 'A' "A"
类型 char 字符串(字符数组)
输出 cout << 'A'; cout << "A";

易错:'A' 和 "A" 不一样,前者是字符,后者是字符串。


三、char 变量的声明与初始化

char c;              // 声明
c = 'A';             // 赋值

char d = 'B';        // 声明并初始化
char e = '7';
char f = ' ';

一次声明多个:

char a = 'X', b = 'Y', c;

注意:

  • 字符必须用单引号。
  • 不能写成 char c = "A";,这是错误的。
  • 空格字符写作 ' '。

四、字符的输入与输出

1. 输出

char c = 'A';
cout << c << endl;   // 输出 A

输出 ASCII 码:

cout << (int)c << endl;   // 输出 65

2. 输入

char c;
cin >> c;

cin >> c 会跳过空格、换行、制表符,读取第一个非空白字符。

例如输入:

   A

c 得到 'A'。

3. 读入空格或换行

使用 cin.get():

char c;
cin.get(c);

cin.get(c) 可以读取任意一个字符,包括空格和换行。

一级重点掌握 cin >> c,cin.get() 了解即可。


五、ASCII 码

字符在计算机中是以 ASCII 码存储的整数。

1. 关键 ASCII 值

字符 ASCII
'0' 48
'9' 57
'A' 65
'Z' 90
'a' 97
'z' 122
空格 32
换行 10

2. 规律

  • 数字字符 '0' 到 '9' 连续。
  • 大写字母 'A' 到 'Z' 连续。
  • 小写字母 'a' 到 'z' 连续。
  • 同一个字母,小写比大写大 32。

例如:

'a' - 'A' = 97 - 65 = 32

六、字符与整数转换

1. 字符转整数

char c = 'A';
int x = c;          // 65
cout << (int)c;     // 65

数字字符转数字:

char c = '7';
int x = c - '0';    // 7

2. 整数转字符

int x = 65;
char c = (char)x;   // 'A'
cout << c;          // A

数字转数字字符:

int x = 7;
char c = x + '0';   // '7'

3. 字符参与算术运算

char c = 'A';
cout << c + 1 << endl;   // 66
cout << (char)(c + 1) << endl;  // B

七、大小写转换

1. 手动转换

小写转大写:

char c = 'a';
c = c - 'a' + 'A';   // 'A'

或:

c = c - 32;

大写转小写:

char c = 'A';
c = c - 'A' + 'a';   // 'a'

或:

c = c + 32;

2. 使用函数

需要头文件:

#include <cctype>

函数:

c = toupper(c);   // 小写转大写
c = tolower(c);   // 大写转小写

示例:

char c;
cin >> c;

if (c >= 'a' && c <= 'z') {
    c = toupper(c);
}
cout << c << endl;

3. 注意

  • 只对字母有效。
  • 非字母字符不变。
  • toupper 返回 int,赋给 char 会隐式转换。

八、字符判断函数

需要头文件:

#include <cctype>

常用函数:

函数 作用 示例
isdigit(c) 是否数字字符 isdigit('7') 为真
isalpha(c) 是否字母 isalpha('A') 为真
islower(c) 是否小写字母 islower('a') 为真
isupper(c) 是否大写字母 isupper('A') 为真
isspace(c) 是否空白字符 isspace(' ') 为真

这些函数返回非零表示真,返回 0 表示假。

示例:

char c;
cin >> c;

if (isdigit(c)) {
    cout << "数字";
} else if (isalpha(c)) {
    cout << "字母";
} else {
    cout << "其他";
}

一级也可以不用函数,直接用范围判断:

if (c >= '0' && c <= '9') {
    cout << "数字";
} else if (c >= 'A' && c <= 'Z') {
    cout << "大写字母";
} else if (c >= 'a' && c <= 'z') {
    cout << "小写字母";
} else {
    cout << "其他";
}

九、简单字符串处理

一级不要求数组和 string,但需要了解字符串常量的输出和简单字符序列的处理。

1. 字符串常量输出

cout << "Hello" << endl;
cout << "Hello, World!" << endl;

字符串常量用双引号。

2. 字符数组(了解)

字符数组可以存一串字符:

char s[10] = "Hello";
cout << s << endl;   // 输出 Hello

注意:

  • 字符数组末尾有一个 '\0' 作为结束标志。
  • 一级不要求数组操作,了解即可。

3. 用 string(了解)

需要头文件:

#include <string>

示例:

string s = "Hello";
cout << s << endl;
cout << s.length() << endl;   // 5

一级不要求 string,但可以了解。

4. 逐个处理字符

如果读入一串字符,可以用循环逐个处理。

例如:读入一个字符,判断类型并转换:

char c;
cin >> c;

if (c >= 'a' && c <= 'z') {
    c = c - 'a' + 'A';
}

cout << c << endl;

再如:统计输入中数字字符的个数(了解):

char c;
int cnt = 0;

while (cin >> c) {
    if (c >= '0' && c <= '9') {
        cnt++;
    }
}
cout << cnt << endl;

按 Ctrl+Z(Windows)或 Ctrl+D(Linux)结束输入。

5. 输出字符串中的每个字符(了解 三级考察)

char s[] = "ABC";
for (int i = 0; s[i] != '\0'; i++) {
    cout << s[i] << " ";
}

输出:

A B C

一级了解即可。


十、常见模型

1. 判断字符类型

char c;
cin >> c;

if (c >= '0' && c <= '9') {
    cout << "数字";
} else if (c >= 'A' && c <= 'Z') {
    cout << "大写字母";
} else if (c >= 'a' && c <= 'z') {
    cout << "小写字母";
} else {
    cout << "其他字符";
}

2. 小写转大写

char c;
cin >> c;

if (c >= 'a' && c <= 'z') {
    c = c - 'a' + 'A';
}

cout << c << endl;

3. 大写转小写

char c;
cin >> c;

if (c >= 'A' && c <= 'Z') {
    c = c - 'A' + 'a';
}

cout << c << endl;

4. 字符转 ASCII

char c;
cin >> c;
cout << (int)c << endl;

5. ASCII 转字符

int x;
cin >> x;
cout << (char)x << endl;

6. 数字字符转数字

char c;
cin >> c;
int x = c - '0';
cout << x << endl;

7. 数字转数字字符

int x;
cin >> x;
char c = x + '0';
cout << c << endl;

十一、易错点

  1. 单引号和双引号混用

    char c = "A";   // 错误
    char c = 'A';   // 正确
    
  2. 字符常量多个字符

    char c = 'AB';  // 错误
    
  3. '0' 和 0 混淆

    char c = '0';   // 字符 0,ASCII 48
    int x = 0;      // 整数 0
    
  4. 数字字符转数字忘记减 '0'

    char c = '7';
    int x = c;        // 55,错误
    int y = c - '0';  // 7,正确
    
  5. 大小写转换加减错误

    c = c + 32;   // 大写转小写
    c = c - 32;   // 小写转大写
    
  6. cin >> c 读不到空格

    char c;
    cin >> c;   // 空格会被跳过
    

    读空格用 cin.get(c);

  7. 字符比较用 ASCII 码

    'A' < 'a'   // true,65 < 97
    
  8. 忘记 #include <cctype>
    使用 toupper、tolower、isdigit 等函数时要包含。

  9. toupper 返回值赋给 char 没问题,但直接输出可能显示整数

    cout << toupper('a');        // 可能输出 65
    cout << (char)toupper('a');  // 输出 A
    
  10. 字符串常量不能用单引号

    cout << 'Hello';   // 错误
    cout << "Hello";   // 正确
    
  11. 字符数组越界
    一级不要求,但注意字符数组长度要足够。

  12. 输出格式错误
    注意空格、换行,按题目要求输出。


十二、阅读程序写结果

题目 1

char c = 'A';
cout << c << endl;

输出:

A

题目 2

char c = 'A';
cout << (int)c << endl;

输出:

65

题目 3

char c = 'a';
c = c - 32;
cout << c << endl;

输出:

A

题目 4

char c = '7';
int x = c - '0';
cout << x << endl;

输出:

7

题目 5

int x = 65;
cout << (char)x << endl;

输出:

A

题目 6

char c = 'A';
cout << c + 1 << endl;

输出:

66

题目 7

char c = 'A';
cout << (char)(c + 1) << endl;

输出:

B

题目 8

char c;
cin >> c;
if (c >= 'a' && c <= 'z') {
    cout << "小写";
} else if (c >= 'A' && c <= 'Z') {
    cout << "大写";
} else {
    cout << "其他";
}

输入:

a

输出:

小写

题目 9

char c = '5';
if (c >= '0' && c <= '9') {
    cout << "数字字符";
}

输出:

数字字符

题目 10

cout << "A" << 'B' << endl;

输出:

AB

十三、速查表

需求 写法
声明字符 char c;
字符常量 'A'
字符串常量 "Hello"
输入字符 cin >> c;
输入空格 cin.get(c);
输出字符 cout << c;
输出 ASCII cout << (int)c;
字符转整数 int x = c;
整数转字符 char c = (char)x;
数字字符转数字 int x = c - '0';
数字转数字字符 char c = x + '0';
小写转大写 c = c - 'a' + 'A'; 或 toupper(c)
大写转小写 c = c - 'A' + 'a'; 或 tolower(c)
判断数字 c >= '0' && c <= '9' 或 isdigit(c)
判断字母 isalpha(c)
判断大写 c >= 'A' && c <= 'Z' 或 isupper(c)
判断小写 c >= 'a' && c <= 'z' 或 islower(c)
判断空白 isspace(c)
输出字符串 cout << "Hello";
字符数组 char s[10] = "Hello";(了解)
string string s = "Hello";(了解)

十四、总结

char 类型与简单字符串处理是一级考试中字符部分的核心。

  1. char 存一个字符,用单引号。
  2. 字符串用双引号,可以多个字符。
  3. 字符本质是 ASCII 码整数,可以和整数转换。
  4. '0' 是字符,0 是整数,不要混淆。
  5. 数字字符转数字要减 '0',数字转数字字符要加 '0'。
  6. 小写字母比大写字母大 32。
  7. 大小写转换可以手动加减,也可以用 toupper/tolower。
  8. 字符判断可以用范围比较,也可以用 isdigit/isalpha 等函数。
  9. cin >> c 会跳过空格和换行,读空格要用 cin.get(c)。
  10. 简单字符串处理了解字符串常量、字符数组和 string 的基本输出即可。

复习时多练“字符类型判断”“大小写转换”“数字字符与数字转换”“ASCII 码输出”四类题,重点注意单双引号、'0'、ASCII 码、大小写差 32 和输入输出格式。考试中先判断是字符还是字符串,再看是否需要转换或判断,最后按题目要求输出。