/*****************************
一个转义字符总是以反斜杠开始,再加一个其他字符组成。
//全是小写的
/*********************
\o 空字符(NULL)
\n换行符(LF)
\r回车符(CR)
\t水平制表符(HT)
\v垂直制表(VT)
\a响铃(BEL)
\b退格符(BS)
\f换页符(FF)
\’单引号
\”双引号
\\反斜杠
\?问号字符
\ddd 八进制最多3位,多的不包含在转义里
\xhh 十六进制,最多跟两位数字,多的报错
**************************/
#include <iostream>
#include <stdlib.h>
using namespace std;
void test()
{
char str[]="ab\n\012\\\"";
printf("%d\n",strlen(str));
//字符串中包含的6个字符是:'a'、'b'、'\n'、'\012'、'\\'和'\"'
}
void test2()
{
printf("%d\n",strlen("\t\"\065\xff\n"));
//字符串中包含的5个字符是:'\t'(跳格符)、'\"'(双引号)、
//'\065'(ASCII值为八进制065,也即十进制为51的字符)、
//'\xff'(ASCII值为十六进制ff,也即十进制为255的字符)、'\n'(换行符)。
}
void main()
{
/*
\ddd 任意字符三位八进制 最多跟3个数字,其他数字另算
\xhh 任意字符 二位十六进制 后面不得超过两位数字
*/
cout<<"对于八进制类型\n"; // \dddd八进制
printf("%d\n",strlen("\2344"));//2
printf("%d\n",strlen("\234"));//1
printf("%d\n",strlen("\12"));//1
printf("%d\n",strlen("\1"));//1
char k[]="\123456";
cout<<k[0]<<endl;//字符0x12表示s
cout<<k[1]<<endl;//4
cout<<k[2]<<endl;//5
cout<<k[3]<<endl;//6
cout<<k[4]<<endl;//回车
cout<<"对于十六制类型\n"; // \xhh
//printf("%d\n",strlen("\x234"));
//编译不通过 too big for character
// \x最多跟两个数字
printf("%d\n",strlen("\x12"));//1
printf("%d\n",strlen("\x1"));//1
char a[]="\x12ww";
cout<<a[0]<<endl;//字符0x12
cout<<a[1]<<endl;//w
cout<<a[2]<<endl;//w
cout<<"*************回车类型************\n";
cout<<"\\\\"<<"长度"<<strlen("\\\\")<<endl; //2
cout<<"\a"<<"长度"<<strlen("\a")<<endl; //1
cout<<"\0"<<"长度"<<strlen("\0")<<endl; //0
cout<<"\\\"ABCDEF\"\\"<<"长度"<<strlen("\\\"ABCDEF\"\\")<<endl; //10
cout<<"********制表符号*****************"<<endl;
cout<<"0123456789"<<endl;
cout<<"\t124567"<<endl; //\t是右移动8个字符长度
cout<<"01245678\baaa"<<endl; //\b是后退一格
/*
0123456789
124567
0124567aaa
*/
cout<<"********转义各个含义*****************"<<endl;
cout<<"\'"<<endl; //单引号
cout<<"\""<<endl; //双引号
cout<<"\\"<<endl; //反斜杠
cout<<"aaaa\?123"<<endl; // 问号字符
cout<<"aaa\0aaaa"<<endl;//空字符\0
cout<<"111\naaa"<<endl ;//换行 (换到下一行)
cout<<"012\r345"<<endl ;//回车(回到行首)
cout<<"888888888888888\v2222222222222"<<endl ;//回车(回到行首)
char Y[]="\X01";
cout<< "长度"<<Y[0]<<endl;
printf("%x\n",Y[0]);
cout<<Y[1]<<endl;//w
cout<<Y[2]<<endl;//w
cout<<Y[3]<<endl;//w
cout<<Y[4]<<endl;//w
printf("\x3F");//0x3f对应字符?
//注意\X和\x的区别,只有小写才是转义字符
printf("\n**********\n");
cout<<"\X"<<"长度"<<strlen("\X")<<endl; //1
cout<<"\Xaa"<<"长度"<<strlen("\Xaa")<<endl; //1
/*
X长度1
Xaa长度3
*/
}