2013年4月17日水曜日

開発環境

プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)の第3章(制御の流れ)、3.4(Switch)の演習 3-2を解いてみる。

その他参考書籍

演習 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 コメント:

コメントを投稿