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