练习 3-2
编写一个函数 escape(s, t),将字符串 t 复制到字符串 s 中,并在复制
过程中将换行符、制表符等不可见字符分别转换为\n、\t 等相应的可见的转义字符序列。要
求使用 swich 语句。再编写一个具有相反功能的函数,在复制过程中将转义字符序列转换为
实际字符。
转换用函数 :
void escape(char s[], char t[])
{
int i, j;
i = j = 0;
while (s[i] != '\0')
{
//太多了,写3个意思意思
switch (s[i])
{
case '\n':
t[j++] = '\\';
t[j++] = 'n';
break;
case '\t':
t[j++] = '\\';
t[j++] = 't';
break;
case '\r':
t[j++] = '\\';
t[j++] = 'r';
break;
default:
t[j++] = s[i];
break;
}
i++;
}
t[j] = s[i];
}
反转用函数 :
void unescape(char s[], char t[])
{
/*
这不一样么!
(╯°Д°)╯︵┻━┻
*/
int i, j;
i = j = 0;
while (s[i] != '\0')
{
if (s[i] == '\\')
{
//看见了转义字符,直接选择下一个字符
switch (s[++i])
{
case 'n':
t[j++] = '\n';
break;
case 't':
t[j++] = '\t';
break;
case 'r':
t[j++] = '\r';
break;
default:
t[j++] = s[i];
break;
}
i++;
}
else
{
t[j++] = s[i++];
}
}
t[j] = s[i];
}
差不多啊,这两个
完整代码 :
/*练习 3-2 编写一个函数 escape(s, t),将字符串 t 复制到字符串 s 中,并在复制
过程中将换行符、制表符等不可见字符分别转换为\n、\t 等相应的可见的转义字符序列。要
求使用 swich 语句。再编写一个具有相反功能的函数,在复制过程中将转义字符序列转换为
实际字符。*/
#include <stdio.h>
void readString(char s[]);
void escape(char s[], char t[]);
void unescape(char s[], char t[]);
main()
{
char s1[500] = "hello world! ";
char t1[1000];
readString(s1);
escape(s1, t1);
printf("%s\n", t1);
unescape(t1, s1);
printf("%s\n", s1);
}
void escape(char s[], char t[])
{
int i, j;
i = j = 0;
while (s[i] != '\0')
{
//太多了,写3个意思意思
switch (s[i])
{
case '\n':
t[j++] = '\\';
t[j++] = 'n';
break;
case '\t':
t[j++] = '\\';
t[j++] = 't';
break;
case '\r':
t[j++] = '\\';
t[j++] = 'r';
break;
default:
t[j++] = s[i];
break;
}
i++;
}
t[j] = s[i];
}
void unescape(char s[], char t[])
{
/*
这不一样么!
(╯°Д°)╯︵┻━┻
*/
int i, j;
i = j = 0;
while (s[i] != '\0')
{
if (s[i] == '\\')
{
//看见了转义字符,直接选择下一个字符
switch (s[++i])
{
case 'n':
t[j++] = '\n';
break;
case 't':
t[j++] = '\t';
break;
case 'r':
t[j++] = '\r';
break;
default:
t[j++] = s[i];
break;
}
i++;
}
else
{
t[j++] = s[i++];
}
}
t[j] = s[i];
}
void readString(char s[])
{
int c, y;
y = 0;
while ((c = getchar()) != EOF)
s[y++] = c;
}