c言語escape,rescape

1679 ワード

k&r練習問題3-2,escape(s,t)は,tを可視エスケープシーケンスに変換し,rescape機能は逆である.
自分で書いてみました.
#include<stdio.h>
#define MAXLEN 1024
void escape(char s[], char t[])
{
    int i=0;
    int j=0;
    while(t[i]!='\0'){
        switch(t[i]){
            case '
': s[j++]='\\'; s[j]='n'; break; case '\t': s[j++]='\\'; s[j]='t'; break; default: s[j]=t[i]; break; } ++j; ++i; } s[j]='\0'; } void rescape(char s[], char t[]) { int i=0; int j=0; while(t[i]!='\0'){ if(t[i]=='\\'){ ++i; switch(t[i]){ case 't': s[j]='\t'; break; case 'n': s[j]='
'; break; case '\\': s[j]='\\'; break; default: s[j]=t[i]; break; } }else{ s[j]=t[i]; } ++i; ++j; } s[j]='\0'; } int main() { int i=0; char a[MAXLEN]; char b[]="he sdf k sdf
,jj\t\tllw"; escape(a,b); while(a[i]!='\0') putchar(a[i++]); putchar('
');         rescape(a,b);     while(a[i]!='\0')         putchar(a[i++];     putchar('
'); return 0; }

比較してみると,その解答の簡潔さに及ばない.