首页 > 编程笔记

C++转义字符详解

当我们需要在字符串中表示某些特殊字符时,例如引号、反斜杠、换行符等,直接输入可能会导致语法错误或者不期望的行为。

例如,观察如下代码:
std::cout << "abc"def" << std::endl;
我们的本意是想输出 abc"def 这个字符串,但字符串中的 " 和包裹整个字符串的 " " 发生冲突,编译器无法正确区分它们,所以编译失败。

转义字符就是用来解决类似问题的。

在 C++ 语言中,转义字符是一组特殊的字符,用于表示某些无法直接输入或者在字符串字面量中有特殊意义的字符。

转义字符通过反斜杠\开始,后跟一个或多个字符,代表一个特殊的符号或动作。以下是一些常用的 C++ 转义字符,以及它们的含义和用法。

转义字符 意义 ASCII码值(十进制)
\a 响铃(BEL) 007
\b 退格(BS) ,将当前位置移到前一列 008
\f 换页(FF),将当前位置移到下页开头 012
\n 换行(LF) ,将当前位置移到下一行开头 010
\r 回车(CR) ,将当前位置移到本行开头 013
\t 水平制表(HT)  009
\v 垂直制表(VT) 011
\' 单引号 039
\" 双引号 034
\\ 反斜杠 092
\ddd ddd 表示三位八进制数,\ddd 表示 ASCII 编码值为 ddd 的字符  
\xdd dd 表示两位十六进制数,\xdd 表示 ASCII 编码值为 dd 的字符  

其中,\n是最常用的转义字符,用来换行,让文本从下一行的开头输出。

单引号、双引号、反斜杠是特殊的字符,不能直接表示:
使用转义字符时,虽然在单引号内有两个字符,但实际上反斜杠表示一个转义的开始。如'\n'就是将原来的字符 n 转义成一个换行符,'\a'就是将原来的字符 a 转义成响铃符。

以下是一个完整的实例程序,演示了 C++ 中常见转义字符的功能和用法。
#include <iostream>

int main() {
    std::cout << "Demonstrating Escape Characters:\n";
    std::cout << "Backslash: \\\\" << '\n';
    std::cout << "Single Quote: \'" << '\n';
    std::cout << "Double Quote: \"" << '\n';
    std::cout << "Question Mark: \?" << '\n';
    std::cout << "New Line Character:" << '\n' << "New line starts here\n";
    std::cout << "Carriage Return: \r" << "This will overwrite\n";
    std::cout << "Horizontal Tab: Column1\tColumn2" << '\n';
    std::cout << "Vertical Tab: Row1\vRow2" << '\n';
    std::cout << "Backspace: Typo\bFixed" << '\n';
    std::cout << "Alert Sound: \a" << "Did you hear a beep?\n";
    std::cout << "Octal: \101\102\103" << '\n';
    std::cout << "Hexadecimal: \x41\x42\x43" << '\n';

    return 0;
}
运行结果为:

Demonstrating Escape Characters:
Backslash: \\
Single Quote: '
Double Quote: "
Question Mark: ?
New Line Character:
New line starts here
This will overwrite
Horizontal Tab: Column1 Column2
Vertical Tab: Row1 Row2
Backspace: TypFixed
Alert Sound: Did you hear a beep?
Octal: ABC
Hexadecimal: ABC

\a 产生的声音可能在某些系统或终端中不起作用,而 \r 的效果也可能因终端的不同而有所不同。

推荐阅读