题目
编写一个函数escape(s, t),将字符串t 复制到字符串s 中,并在复制过程中将换行符、制表符等不可见字符分别转换为\n、\t等相应的可见的转义字符序列。要求使用swich语句。再编写一个具有相反功能的函数,在复制过程中将转义字符序列转换为实际字符。
题目分析
写的代码好像无法识别’\t’这个标志,只好用空格来代替。
发现是因为自己太懒。。。。。把那一段输入的字符copy到记事本当中,再次copy出来时,系统就认为’\t’是几个空格了。。。重新修改后更新程序如下:
代码实现
#include <stdio.h>
int main()
{
int c, d, i, j;
char chartesta[200], chartestb[200], chartestc[200];
i = 0;
while ((c = getchar()) != EOF && i < 200)
{
chartesta[i] = c;
i++;
}
chartesta[i] = '\0';
i = j = 0;
while ((c = chartesta[i++]) != '\0' && i < 200)
switch(c)
{
case '\t':
{
chartestb[j++] ='\\';
chartestb[j++] ='t';
break;
}
case '\n':
{
chartestb[j++] ='\\';
chartestb[j++] ='n';
break;
}
default:
{
chartestb[j++] = c;
break;
}
}
chartestb[j] = '\0';
i = 0;
while (chartestb[i] != '\0' && i < 200)
{
printf("%c", chartestb[i]);
i++;
}
printf("\n");
i = j = 0;
while ((c = chartestb[i]) != '\0' && i < 200)
{
switch(c)
{
case '\\':
{
d = chartestb[i + 1];
i++;
switch(d)
{
case 't':
chartestc[j++] = '\t';
break;
case 'n':
chartestc[j++] = '\n';
break;
}
break;
}
default:
{
chartestc[j++] = c;
break;
}
}
i++;
}
chartestc[i] = '\0';
i = 0;
while (chartestc[i] != '\0' && i < 200)
{
printf("%c", chartestc[i]);
i++;
}
}
执行结果
abc def gh ijkl mn
opq rst vw xy z
^Z
abc\tdef gh\tijkl\tmn\nopq\trst vw\txy \tz\n
abc def gh ijkl mn
opq rst vw xy z