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;
十一、易错点
-
单引号和双引号混用
char c = "A"; // 错误 char c = 'A'; // 正确 -
字符常量多个字符
char c = 'AB'; // 错误 -
'0'和0混淆char c = '0'; // 字符 0,ASCII 48 int x = 0; // 整数 0 -
数字字符转数字忘记减
'0'char c = '7'; int x = c; // 55,错误 int y = c - '0'; // 7,正确 -
大小写转换加减错误
c = c + 32; // 大写转小写 c = c - 32; // 小写转大写 -
cin >> c读不到空格char c; cin >> c; // 空格会被跳过读空格用
cin.get(c); -
字符比较用 ASCII 码
'A' < 'a' // true,65 < 97 -
忘记
#include <cctype>
使用toupper、tolower、isdigit等函数时要包含。 -
toupper返回值赋给char没问题,但直接输出可能显示整数cout << toupper('a'); // 可能输出 65 cout << (char)toupper('a'); // 输出 A -
字符串常量不能用单引号
cout << 'Hello'; // 错误 cout << "Hello"; // 正确 -
字符数组越界
一级不要求,但注意字符数组长度要足够。 -
输出格式错误
注意空格、换行,按题目要求输出。
十二、阅读程序写结果
题目 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 类型与简单字符串处理是一级考试中字符部分的核心。
char存一个字符,用单引号。- 字符串用双引号,可以多个字符。
- 字符本质是 ASCII 码整数,可以和整数转换。
'0'是字符,0是整数,不要混淆。- 数字字符转数字要减
'0',数字转数字字符要加'0'。 - 小写字母比大写字母大 32。
- 大小写转换可以手动加减,也可以用
toupper/tolower。 - 字符判断可以用范围比较,也可以用
isdigit/isalpha等函数。 cin >> c会跳过空格和换行,读空格要用cin.get(c)。- 简单字符串处理了解字符串常量、字符数组和
string的基本输出即可。
复习时多练“字符类型判断”“大小写转换”“数字字符与数字转换”“ASCII 码输出”四类题,重点注意单双引号、'0'、ASCII 码、大小写差 32 和输入输出格式。考试中先判断是字符还是字符串,再看是否需要转换或判断,最后按题目要求输出。