您的位置:首页 > 其它

信息解码, 紫书P83UVa213(进制转换非常经典的题目)

2017-09-01 20:26 169 查看
知识漏洞:在cin,%s等等字符串输入状态下,保存在字符数组中的字符串是以‘/0’结尾,输入到缓冲区的‘/n’会被自动忽略。而getchar()函数会逐个字符读取,字符串结尾直接读取‘/n’,无‘/0’。

// UVa213 Message Decoding
// Rujia Liu

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

//排除换行回车的逐个字符读取,本题的思路基础
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'
4000
;
return v;
}

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

//本题思路核心,本题思路核心,本题思路核心
//用二维字符数组来实现二进制码与其对应字符的一一对应关系
int readcodes() {
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++) {
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐