一道例题,以前看的时候觉得很高大上,昨天突然想起这道题,就看紫书,以紫书的思路自己完成了代码。



#include<stdio.h>
#include<string.h>

int readchar() {
    while (1) {
        int ch = getchar();
        if (ch == '\n'|| ch == '\r') continue;
        else return ch;
    }
}

int readint(int c) {
    int v = 0;
    while (c--)
        v = v * 2 + readchar() - '0';
    return v;
}

int code[8][1 << 8];

int readcode() {
    int i, ch, len;
    code[1][0] = readchar();
    for (len = 2; len <= 7; len++) {
        for (i = 0; i < (1 << len) - 1; i++) {
            ch = getchar();
            if(ch == EOF) return 0;
            if(ch == '\n'|| ch == '\r') return 1;
            code[len][i] = ch;
        }
    }
    return 1;
}

int main() {
    while(readcode()) {
        while(1) {
            int len = readint(3);
            if(len == 0) break;
            while(1) {
                int v = readint(len);
                if(v < (1 << len) - 1)
                    putchar(code[len][v]);
                else break;
            }
        }
        printf("\n");
        memset(code, 0, sizeof(code));
    }
}