1.2进制处理:利用readint从高位到低位将2进制转十进制; 用1<<len-1表示len位2进制的最大值
2. 将(len,value)存于code以便读取(tql) (只想到了用map<string,char>来存,但太麻烦了,感觉map就像是c#里的library啊)
3.\n,\r在windows和linux中含义不同
4.用char读取EOF
#include <cstdio>
#include <cstring>
int readchar(){
for (;;){
int ch = getchar();
if (ch != '\n' && ch != '\r') return ch;
}
}
int readint(int c){
int v = 0;
while (c--){
v = v * 2 + readchar() - '0';
}
return v;
}
int code[8][1<<8];//编码头最多到7(111)
int readcode(){
memset(code, 0, sizeof(code));
code[1][0] = readchar();//在刚开始读取时按回车无影响
for (int len = 2; len <= 7; len++){
for (int i = 0; i < (1<<len) - 1; i++){//用1<<len-1表示len位2进制的最大值
int ch = getchar();
if (ch == EOF) return 0;
if (ch == '\n' || ch == '\r') return 1;
code[len][i] = ch;
}
}
return 1;
}
int main(){
while(readcode()){
for (;;){
int len = readint(3);
if(len == 0) break;
for (;;){
int v = readint(len);
if(v == (1 << len) - 1) break;
putchar(code[len][v]);
}
}
putchar('\n');
}
return 0;
}