转义符的识别

来源:百度知道 编辑:UC知道 时间:2024/07/13 04:28:14
题目要求:用编译原理的角度编写
C语言的字符串常量书写时使用了大量的转义符,如“\\”表示单斜杠,而“\n”表示换行(同“\u000A”),“\x20”表示十六进制表示形式(恰好两位)与 ASCII 字符匹配(这里代表值为32的ASCII字符,即空格)。请参照C语言教材,编制一个软件,输入包含转义符的字符串,输出没有转义符的真实字符串。
利用编译原理的某种思想或方法,设计一个应用程序,实现的具体内容自拟 转义字符 意义 ASCII码值(十进制)
\a 响铃(BEL) 007
\b 退格(BS) 008
\f 换页(FF) 012
\n 换行(LF) 010
\r 回车(CR) 013
\t 水平制表(HT) 009
\v 垂直制表(VT) 011
\\ 反斜杠 092
\? 问号字符 063
\' 单引号字符 039
\" 双引号字符 034
\0 空字符(NULL) 000
\ddd 任意字符 三位八进制
\xhh 任意字符 二位十六进制
希望都能在程序中识别出来

无论是形如“\n”“\t”这样的字符,还是\ddd与\xhh形式的字符,均可识别。
输入:abc\nabc\tabc\x0aabc\012abc
输出:
abc
abc
abc abc
abc
abc
#include<stdio.h>
void interpret(char *s1,char *s2);
int fun8(char *x);
int fun16(char *x);
int main(void)
{ char s1[100],s2[100];
gets(s1);
interpret(s1,s2);
puts(s2);
}
void interpret(char *s1,char *s2)
{ char x[4];
int i,j=0,k;
for(i=0;s1[i]!='\0';i++)
if(s1[i]!='\\')
s2[j++]=s1[i];
else
{ switch(s1[i+1])
{ case 'a' : s2[j++]='\a';i++;continue;
case 'b' : s2[j++]='\b';i++;continue;
case 'f' : s2[j++]='\f';i++;continue;
case 'n' : s2[j++]='\n';i++;continue;
case 'r' : s2[j++]='\r';i++;continue;