/* Exercise 3.2 from "The c programming language" book by K&R */
#include <stdio.h>
/* transform <TAB> or <CR> in s[] to "\t" or "\n" and put result into t[] */
void escape(char s[], char t[])
{
int i = 0;
int k = 0;
while (t[i] != '\0')
switch (t[i++]) {
case '\t':
s[k++] = '\\';
s[k++] = 't';
break;
case '\n':
s[k++] = '\\';
s[k++] = 'n';
break;
default:
s[k++] = t[i-1];
break;
}
s[k] = '\0';
}
/* transform "\t" or "\n" in s[] to <TAB> or <CR> and put result into t[] */
void unescape(char s[], char t[])
{
int i = 0;
int k = 0;
while (t[i] != '\0')
if (t[i++] == '\\')
switch (t[i++]) {
case 't':
s[k++] = '\t';
break;
case 'n':
s[k++] = '\n';
break;
default:
s[k++] = t[i-2];
s[k++] = t[i-1];
break;
}
else
s[k++] = t[i-1];
s[k] = '\0';
}
int main(void)
{
char s[100] = "";
char t1[] = "ab st";
char t2[] = "ab\tst";
escape(s,t1);
printf("%s\n",s);
unescape(s,t2);
printf("%s\n",s);
return 0;
}
----------