開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- プログラミング言語: C
- Clang (コンパイラ)
プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)の第3章(制御の流れ)、3.4(Switch)の演習 3-2を解いてみる。
その他参考書籍
- プログラミング言語Cアンサー・ブック 第2版 (クロビス・L.トンド、スコット・E.ギンペル(著)、矢吹 道郎(翻訳))
演習 3-2.
コード
sample.c
#include <stdio.h> void escape(char s[], char t[]); void unescape(char s[], char t[]); int main() { char s[1000], t[1000], u[1000]; int i; for (i = 0; i < 100; i++) { if (i % 20 == 0) s[i] = '\t'; else if(i % 10 == 0) s[i] = '\n'; else if(i % 15 == 0) { s[i++] = '\\'; s[i] = 'n'; } else if (i % 5 == 0) { s[i++] = '\\'; s[i] = 't'; } else if(i % 9 == 0) { s[i++] = '\\'; s[i] = 'n'; } else if(i % 8 == 0) { s[i++] = '\\'; s[i] = 't'; } else if(i % 7 == 0) { s[i++] = '\\'; s[i] = '\\'; } else if(i % 6 == 0) { s[i++] = '\\'; s[i] = '@'; } else { s[i] = '*'; } } s[i] = '\0'; escape(s, t); unescape(t, u); printf("S\n%s\n", s); printf("T\n%s\n", t); printf("U\n%s\n", u); return 0; } void escape(char s[], char t[]) { int i, j; for (i = j = 0; s[i] != '\0'; i++) { switch (s[i]) { case '\n': t[j++] = '\\'; t[j++] = 'n'; break; case '\t': t[j++] = '\\'; t[j++] = 't'; break; default: t[j++] = s[i]; break; } } t[j] = '\0'; } void unescape(char s[], char t[]) { int i, j; for (i = j = 0; s[i] != '\0'; i++) { if (s[i] != '\\') t[j++] = s[i]; else { switch(s[++i]) { case 'n': t[j++] = '\n'; break; case 't': t[j++] = '\t'; break; default: t[j++] = '\\'; t[j++] = s[i]; break; } } } t[j] = '\0'; }
入出力結果(Terminal)
$ ./a.out S ****\t\\\n*\@\\\t\n \\*\t*\n* *\t*\t*** *\\*\n*\t ***\n\t** **\n\t*** *\n*\n\\* \n*\\**\t \\**\t*\\ T \t****\t\\\n*\@\\\t\n\t\\*\t*\n*\n*\t*\t***\t*\\*\n*\t\n***\n\t**\t**\n\t***\n*\n*\n\\*\t\n*\\**\t\n\\**\t*\\ U **** \\ *\@\\ \\* * * * * *** *\\* * *** ** ** *** * * \\* *\\** \\** *\\ $
0 コメント:
コメントを投稿