操作过程:① 输入编码头
②输入编辑文本
③根据编码文本输出相应的编码头里的字符
思路 : ①读取文本编码的头三个数字(因为头三个数字代表着读取多少个字符)
②确定读取n个为一组的二进制数
③将相应的二进制数转化为十进制数
④ 将对应数组里的字符输出
重点:数组的安排非常重要 。这里的code[len][value], len 表示的二进制数的长度,value表示的是二进制数转换成对应的十进制数
#include <stdio.h>
#include <string.h>
int code[8][1<<8];
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 readcodes()
{
memset(code,0,sizeof(code));
//不是很清楚,为什么第一个需要用readchar()
//解释说是:编码头是单独一行,所以要用这种方法
code[1][0] = readchar();
for(int len = 2; len <= 7; len++)
{
for(int i = 0; i < ((1 << len) - 1); i++)
{
//这里的ch是int类型的,需要思考
//应该是把字符也强制转换了吧。
int ch = getchar();
if(ch == EOF)
return 0;
if(ch == '\n' || ch == '\r')
return 1;
code[len][i] = ch;
}
}
return 1;
}
int main()
{
while(readcodes())
{
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;
}