#include <stdio.h>
void escape(char s[],char t[]);
void unescape(char s[],char t[]);
/*
编写一个函数escape(s,t), 将字符串t复制到字符串s中,并在复制过程中将换行符,制表符等不可见字符分别转换为\n,\t等相应的可见转义字符序列。
要求使用switch语句。再编写一个具有相反功能的函数,在复制过程中将转义字符序列转换为实际字符。
思考:
字符串是一个字符数组,为此,在复制过程中需要得到单个字符,可利用数组下标得到单个元素,对下标运算可用到for语句,在其中使用switch语句即可。
可是如何完成转换并完成拼接呢,(本身思路理解为拼接,由此无法继续,以下思路参照标准答案) ,所谓复制,也就是将s字符数组中的字符替换掉,
设计工程:
1.
明确传入的两个为字符数组
2.
for(int i = j = 0; t[i] != '\0'; i++)
2-1:
switch (t[i]) {
case '\n':
s[j] = '\\';
j++;//为存入下一个元素做准备
s[j] = 'n'
j++;//为存入下一个元素做准备
break;
case '\t':
s[j++] = '\\';//j++先使用,在进行加1操作
s[j++] = 't'
break;
default:
s[j++] = t[i];
}
*/
int main(){
char s[] = "ljalj";
char t[] = "wuu\tru\nuropw";
escape(s,t);
printf(s);
// unescape(s,t);
// printf(s);
return 0;
}
void escape(char s[],char t[]) {
int i,j;
for(i = j = 0; t[i] != '\0'; i++) {
switch (t[i]) {
case '\n':
s[j] = '\\';
j++;//为存入下一个元素做准备
s[j] = 'n';
j++;//为存入下一个元素做准备
break;
case '\t':
s[j++] = '\\';//j++先使用,在进行加1操作
s[j++] = 't';
break;
default:
s[j++] = t[i];
break;//逻辑上没必要,但是可以为以后增加其他分支时,降低犯错误的可能性
}
s[j] = '\0';
}
return;
}
/**
再编写一个具有相反功能的函数,在复制过程中将转义字符序列转换为实际字符。
与上面同理
*/
void unescape(char s[],char t[]) {
int i,j;
for(i = j = 0; t[i] != '\0'; i++) {
if(t[i] != '\\') {
s[j++] = t[i];
} else {
switch (t[++i]) {
case 'n':
s[j++] = '\n';
break;
case 't':
s[j++] = '\t';
break;
default://该情况用于处理--\a--这样的情况
s[j++] = '\\';
s[j++] = t[i];
break;//逻辑上没必要,但是可以为以后增加其他分支时,降低犯错误的可能性
}
}
s[j] = '\0'; //作为字符串结束标志
}
return;
}
输出结果:
wuu\tru\nuropw
--------------------------------
Process exited after 6.283 seconds with return value 0
请按任意键继续. . .