6.5 KiB
6.5 KiB
C++ 字符类型 char 与转义字符 讲义
第一部分:字符类型 char (存储单个字符的盒子)
1. 问题引入:除了数字,程序还能处理什么?
在之前的学习中,我们已经学会了用 int 存储整数,用 double 存储小数。但我们的世界是由丰富多彩的文字和符号构成的。比如,我们要编写一个程序,实现一个简易计算器,用户会输入 7 * 2 这样的算式。
7和2,我们可以用int类型的变量来存储。- 但是中间的那个乘号
*呢?它不是一个数字,我们该用什么类型的“盒子”来装它呢?
这时候,char 类型就登场了。
2. 什么是 char 类型?
char 是 "character" (翻译:字符) 的缩写。它是一种专门用来存放单个字符的数据类型。
你可以把它想象成键盘上的任意一个按键,它可以是:
- 一个英文字母 (大写或小写):
'A','b','Z' - 一个数字字符:
'0','1','9'(注意:这和数字0, 1, 9是不同的) - 一个标点或符号:
',','.','?','+','*' - 一个空格:
' '
3. 如何在 C++ 中使用 char?
char 的使用方式和 int 基本一致,但有一个极其重要的区别:
在为
char变量赋值或进行比较时,字符值必须被一对单引号' '包围。
- 正确的写法:
char c1 = 'A'; // 正确!用单引号包围 char c2 = '*'; char c3 = ' '; // 空格也是一个字符 - 错误的写法:
char c4 = A; // 错误!编译器会认为 A 是一个变量名,而不是字符'A' char c5 = "A"; // 错误!双引号 "" 是用来表示字符串的,不能用于单个字符
4. 实战演练:简易计算器
-
问题:输入两个整数和一个乘号
*,输出这两个整数的乘积。- 输入样例:
7 * 2 - 输出样例:
14
- 输入样例:
-
逻辑分析:
- 准备“盒子”:我们需要两个盒子装整数,一个盒子装中间的
*号。int num1, num2;char op;(op是 operator/操作符的英文缩写)
- 接收“原料”:C++ 的
cin非常智能,它会根据你变量的顺序和类型,自动读取并分割输入。cin >> num1 >> op >> num2;当用户输入7 * 2时,cin会把7存入num1,把*存入op,把2存入num2。
- 加工计算:
int result = num1 * num2; - 交付产品:
cout << result;
- 准备“盒子”:我们需要两个盒子装整数,一个盒子装中间的
-
完整代码:
#include <iostream> using namespace std; int main() { int num1, num2; char op; // 准备一个char类型的盒子来装运算符 cout << "请输入一个乘法表达式 (如 7 * 2): "; cin >> num1 >> op >> num2; int result = num1 * num2; cout << "计算结果是: " << result << endl; return 0; }
第二部分:转义字符
1. 观察代码
我们已经知道,放在双引号 "" 里的内容,通常会被原样输出。但请观察以下代码:
cout << "hello\nworld";
按照我们的直觉,屏幕上应该会打印出 hello\nworld。但实际运行结果却是:
hello
world
我们发现:
- 字符
\和n在屏幕上“神秘地消失”了。 world被打印到了新的一行。
原因解析:这并不是 Bug,而是因为 \n 是 C++ 语法中的一个**转义字符。
2. 转义字符的原理与应用
-
什么是转义字符? 转义字符是一种特殊的符号组合,它以反斜杠
\开头,用于在代码中表示一些无法直接打印的控制功能(如换行、制表符)或具有特殊语法含义的字符本身(如双引号、反斜杠自己)。你可以把反斜杠
\想象成一个“魔法棒”。当它出现在一个字符前面时,它会改变后面那个字符的本来面目,赋予它一个特殊的魔法效果。 -
常用转义字符对照表
转义符 术语 实际作用与说明 \n换行符 效果:换行。将光标移动到下一行的行首。 \t水平制表符 效果:对齐。将光标向前跳跃一个制表位的距离(通常相当于几个空格)。 \\反斜杠字符 效果:让它变回一个普通的反斜杠字符并打印出来,即输出一个反斜杠本身。 \"双引号字符 效果:让它变回一个普通的双引号字符并打印出来,即输出一个双引号本身。 \'单引号字符 用于打印单引号本身。
3. 综合应用实例
-
任务目标:在屏幕上输出下面这句话:
小明说:"what is \n" -
逻辑推演:
- 基础结构:首先,整句话是一个字符串需要通过
cout输出,那么需要用一对双引号包围。cout << "小明说:"what is \n"";<-- 如果这样直接写,就全部乱套了! - 解决内部双引号冲突:目标文本中的双引号
"会让编译器误以为字符串提前结束了。我们需要用\"来告诉编译器:这个双引号只是一个普通字符,我想要输出它本身,不是字符串的边界。 - 解决
\的冲突:我们想输出\本身。于是我们需要用\\来打印出那个反斜杠本身。cout << "小明说:\"what is \\n\"";<-- 解决!
- 基础结构:首先,整句话是一个字符串需要通过
-
C++ 实现代码:
#include <iostream> using namespace std; int main() { cout << "小明说:\"what is \\n\"" << endl; return 0; }
总结
char是用来存储单个字符的“小盒子”,它的值必须用**单引号''**括起来。- 转义字符以反斜杠
\开头,它能赋予紧随其后的字符一个特殊的功能或让其变回普通字符。 \n(换行) 和\t(制表) 是最常用的功能性转义字符。- 当你需要在字符串中打印
"或\本身时,必须在它们前面再加上一个\,即使用\"和\\。