输入转移
描述:
输入一行字符。
将其中的所有有效转义字符转换为对应字符,并输出转换后的字符串。
有效转义字符的定义及转义规则:
1、本题的转义包括且仅包括 “\”(反斜杠)引起的转义。
2、本题的转义共分为两种:
第一种为 反斜杠与数字(小于128的非负整数)的组合,如 \117 为字符 'u' ;
第二种为 反斜杠与非数字字符的组合,表示忽略其原有一切意义,并直接输出该非数字字符。
3、 对于第一种转义,反斜杠应尽可能匹配更大的值,如 \122 应该匹配 ASCII值为 122 的字符 , 而 \1308 只能被理解为 字符'\13' 和 "08"的组合。
4、对于 单/双引号 内的字符(串),不进行转义处理。
输入:
一行字符串,以回车结尾。
输出:
对应的一系列字符。
输入样例1:
123456789\10abc
输出样例1:
123456789
abc
输入样例2:
"There is no \'\\\' in this string",but there id one \'\\\'.
输出样例2:
"There is no \'\\\' in this string ",but there is one'\'.
思路:
就是读懂题意后模拟。
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 6 using namespace std; 7 8 int main() 9 { 10 11 int tem=-1,f=0; 12 int dan=0,shuang=0; 13 char ss=getchar(); 14 while(ss!='\n'&&ss!=-1) 15 { 16 if(ss<='9'&&ss>='0'&&f&&(!(shuang&1))&&(!(dan&1))) 17 { 18 if(tem==-1)tem=0; 19 tem=tem*10+ss-'0'; 20 if(tem>=128) 21 { 22 tem=tem/10; 23 char ch=tem; 24 cout<<ch; 25 cout<<ss; 26 tem=-1;f=0; 27 } 28 ss=getchar();continue; 29 } 30 if(f) 31 { 32 if(tem>=0) 33 { 34 char ch=tem; 35 cout<<ch; 36 } 37 else 38 { 39 cout<<ss; 40 f=0; 41 ss=getchar(); 42 continue; 43 } 44 tem=-1;f=0; 45 } 46 if(ss=='"'&&(!f)) 47 { 48 cout<<'"'; 49 shuang++; 50 ss=getchar(); 51 continue; 52 } 53 if(ss=='\''&&(!f)) 54 { 55 cout<<'\''; 56 dan++; 57 ss=getchar(); 58 continue; 59 } 60 if(ss=='\\'&&(!f)&&(!(shuang&1))&&(!(dan&1))) 61 { 62 f=1; 63 ss=getchar(); 64 continue; 65 } 66 cout<<ss; 67 ss=getchar(); 68 } 69 if(tem!=-1) 70 { 71 char ch=tem; 72 cout<<ch; 73 } 74 cout<<endl; 75 return 0; 76 }