转义序列(\r \n \t \b)和泛化转义序列
转义序列
1.换行符\n和回车符\r
首先搞清楚二者的区别:换行\n是指换到下一行开头;回车\r是指回到本行行首
。
测试:
#include <iostream>
using namespace std;
int main()
{
cout << "I love China"<< endl;
cout << "回车符\\r:" << endl;//转义序列以\开始,此处转义'\'
cout << "I lo\rve China" << endl;//回车符后的字符>其前的字符
cout << "I love Chi\rna" << endl;//回车符后的字符<其前的字符
cout << "换行符\\n:" << endl;//转义序列以\开始,此处转义'\'
cout << "I lo\nve China" << endl;
system("pause");
return 0;
}
这里解释一下回车符\r:
第一种情况下,先把“I lo”存在缓存中,一遇到\r,立马跳到行首,继续把“ve China”存入缓存。这样就覆盖了前面字符;对于第二种情况,na只是覆盖了I和一个空格,“love Chi”并不覆盖,所以可以打印到屏幕。
2.制表符\t和退格符\b
#include <iostream>
using namespace std;
int main()
{
cout << "制表符\\t:" << endl;//转义序列以\开始,此处转义'\'
cout << "I l\tove China" << endl;
cout << "I l*****ove China" << endl;
cout << "1234567\t89" << endl;
cout << "12345678\t89" << endl;
cout << "12345678123456789" << endl;
cout << "退格符\\b:" << endl;//转义序列以\开始,此处转义'\'
cout << "I lo\bve China" << endl;
system("pause");
return 0;
}
解释:
- 退格符\b是删除前一个字符。
- 制表符\t是每次
以8个空格为单位进行制表
。如第一个前面已有’I l’3个字符,所以\t空出5个格;第二个\t处在第8个位置,所以打印出一个格;第3个\t处于第9个位置,所以空8个格。
泛化的转义序列
泛化的转义序列的形式有两种:
- 为
\后紧跟3个八进制数(最多只能3个,超过的算其他字符)
:
如\12表示换行符,\40表示空格,\124表示大T,\1243则表示T3。 - 为
\x后面紧跟着1个或多个十六进制数
:
如\xa表示换行符,\x20表示空格,\x54表示大T,由于字符只占8位,所以最多只能有两个16进制位,多了会报错。
测试及结果:
#include <iostream>
using namespace std;
int main()
{
cout << "八进制泛化转义序列:" << endl;
cout << "I lo\40ve China\12\124" << endl;
cout << "\1243" << endl;
cout << "十六进制泛化转义序列:" << endl;
cout << "I lo\x20ve China\xa\x54" << endl;
//cout << "\x100" << endl;//错误:error C2022: “256”: 对字符来说太大
system("pause");
return 0;
}