開発環境
- 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 コメント:
コメントを投稿