编写一个函数escape(s,t), 将字符串t复制到字符串s中,并在复制过程中将换行符,制表符等不可见字符分别转换为\n,\t等相应的可见转义字符序列。

#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
请按任意键继续. . .

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值