要求:编写一个程序,将字符串t复制到字符串s中,并在复制过程中将制表符、反斜杠等字符分别转换为\t 、\\相应转义字符序列。要求使用switch语句。
#include <stdio.h>
#define MAXWORDS 20
void new_escape(char s[], char t[]);
int main()
{
int i;
char c;
char s[MAXWORDS];
char t[MAXWORDS];
i = 0;
memset(s, 0, sizeof(s));
memset(t, 0, sizeof(t));
printf("please input the S string first!\n");
while((c = getchar()) != '\n'){
s[i++] = c;
}
i = 0;
printf("please input the T string first!\n");
while((c = getchar()) != '\n'){
t[i++] = c;
}
new_escape(s, t);
// printf("%s\n", s);
return 0;
}
void new_escape(char s[], char t[]){
int i, j;
char c;
i = 0;
j = 0;
while(s[i] != '\0'){
i++;
}
while(t[j] != '\0'){
s[i++] = t[j];
j++;
}
printf("%s\n", s);
i = 0;
while(s[i] != '\0'){
if((s[i] != '\t') && (s[i] != '\\')){
printf("%c", s[i]);
}
switch(s[i]){
case '\t':
printf("\\t");
break;
case '\\':
printf("\\\\");
break;
default:
break;
}
i++;
}
}
输出结果
BUG和经验
1.在开始写的时候,给符号常量 MAXWORDS 定义为10,在调试过程中,输入"SSS"和“TTT”程序正常;但是后面输入字符串“SSSTTT”和“DDDDD”这样的长字符串的时候,程序全部显示新字符串但是后面会带有烫烫烫...
因为新字符串超出预定的字符数组空间,元素超过10个,后面的字符占用没有定义过的空间,没有结束符'\0',所以会出现烫烫烫...
2.定义了一个字符数组,一定要进行初始化。这里使用的是memset(s, 0, sizeof(s))函数。在字符数组中字符'0'与'\0'意义等价。memset函数只能给字符数组清零~对于整型数组不能使用。
3.字符数组可以一次性输出,使用printf("%s\n",s);因为字符数组里有事先预存好的'\0'结束符,所以会自动停止,正常输出,并且不会出现乱码“烫烫烫”...