エスケープ文字を文字に変換する
K&R本 演習3-2
改行文字やタブのような文字を目で見えるエスケープ文字\nや\tに変換しながら、sをtにコピーするような関数escape(s,t)を書け。switchを使うこと。
#include <stdio.h> void escape(const char *s,char *t) { for(;*s;++s){ switch(*s){ case '\t': *t++ = '\\'; *t++ = 't'; break; case '\n': *t++ = '\\'; *t++ = 'n'; break; default: *t++ = *s; } } *t = '\0'; } int main (void) { char str[1000]; char t[1000]; while( fgets(str,sizeof(str),stdin) != NULL ) { escape(str,t); printf("%s\n",t); } }
$ cat main.c | main #include <stdio.h>\n \n void escape(const char *s,char *t) {\n \tfor(;*s;++s){\n \t\tswitch(*s){\n \t\t\tcase '\t':\n \t\t\t\t*t++ = '\\';\n \t\t\t\t*t++ = 't';\n \t\t\t\tbreak;\n \t\t\tcase '\n':\n \t\t\t\t*t++ = '\\';\n \t\t\t\t*t++ = 'n';\n \t\t\t\tbreak;\n \t\t\tdefault:\n \t\t\t\t*t++ = *s;\n \t\t}\n \t}\n \t*t = '\0';\n }\n \n int main (void) {\n \tchar str[1000];\n \tchar t[1000];\n \t\n \twhile( fgets(str,sizeof(str),stdin) != NULL ) {\n \t\tescape(str,t);\n \t\tprintf("%s\n",t);\n \t}\n }\n \n
できました。結果を見やすくするために改行コード入れてます。