您的位置:首页 > 其它

The C Programming Language 练习题3-2

2017-10-08 21:17 330 查看
题目

编写一个函数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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: