C语言 UVa 213
里面的
int readcode() //用于读取编码头code;
{
memset(code,0,sizeof(code));
code[1][0]=readchar();
if(code[1][0]==EOF)
return 0; //如果输入为EOF,结束输入;
for(int len=2;len<=7;len++){
for(int i=0;i<(1<<len)-1;i++){//注意(1<<len)的括号;
int ch=getchar();
if(ch==EOF) //如果输入为EOF,结束输入;
return 0;
if(ch=='\n' || ch=='\r')//输入\n||\r代表编码头输入完成;
return 1;
code[len][i]=ch; //i代表的就是[len][value]中的value的值;
}
}
}
为什么这么保存? 如何调用的? 帮忙解读一下,谢谢。
1<<len相当于2的len次方
char codes[8] 这个存储的是输入的字符
readchar()-'0'是把字符模式的0,1转换成数字的0,1
这段代码的思路就是
把二进制的从低到高以0为起点的每一位,乘以2的n次方,把结果加起来,就是10进制。
比如
1011 = 1x2^0+1x2^1+0x2^2+1x2^3=1+2+0+8=11
应该是为了代码的可读性,因为readint(3)的返回值最大就是111b=8h,所以len的最大值是8所以为了保证codes[len][i]不爆,
就直接把len(max)=8代入得到他的定义,直接写2的8次方应该没什么问题