Files

6.5 KiB
Raw Blame History

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
  • 逻辑分析:

    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;
  • 完整代码:

    #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

我们发现:

  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++ 实现代码:

    #include <iostream>
    using namespace std;
    
    int main() {
        cout << "小明说:\"what is \\n\"" << endl;
        return 0;
    }
    

总结

  • char 是用来存储单个字符的“小盒子”,它的值必须用**单引号''**括起来。
  • 转义字符以反斜杠 \ 开头,它能赋予紧随其后的字符一个特殊的功能或让其变回普通字符。
  • \n (换行) 和 \t (制表) 是最常用的功能性转义字符。
  • 当你需要在字符串中打印 " 或 \ 本身时,必须在它们前面再加上一个 \,即使用 \" 和 \\。