UVA - 213 Message Decoding (输入字符串并对单个字符进行操作的输入输出)
Posted on 2014-09-19 18:33 LLGemini 阅读(319) 评论(0) 编辑 收藏 举报
POINT:
关于表示一个编码:利用code字符数组表示一个编码字符,其中code[len][val]表示长度为len,二进制值为val的字符;
主程序如下:
1 #include <iostream> 2 #include <sstream> 3 #include <cstdio> 4 #include <cstring> 5 #include <cmath> 6 #include <string> 7 #include <vector> 8 #include <set> 9 #include <cctype> 10 #include <algorithm> 11 #include <cmath> 12 #include <deque> 13 #include <queue> 14 #include <map> 15 #include <stack> 16 #include <list> 17 #include <iomanip> 18 19 using namespace std; 20 #define INF 0x7fffffff 21 #define maxn 1010 22 typedef unsigned long long ull; 23 24 int code[8][1<<8]; 25 26 int main() 27 { 28 while(readcodes()) 29 { 30 //printcodes(); 31 for(;;) 32 { 33 int len = readint(3); 34 if(len == 0) break; 35 //printf("len = %d\n", len); 36 37 for(;;) 38 { 39 int v = readint(len); 40 //printf("v = %d\n", v); 41 if(v == (1<<len)-1) break; 42 putchar(code[len][v]); 43 } 44 } 45 putchar('\n'); 46 } 47 return 0; 48 }
其中readcodes()函数用来读取编号,readint()函数用来读取c位二进制字符并转化为整数(val);
如何处理“编码文本可由多行组成”
1 bool readcodes() 2 { 3 memset(code, 0, sizeof(code));//清空数组 4 code[1][0] = readchar();//输入开始;单个字符输入 5 for(int len = 2; len <= 7; len++) 6 { 7 for(int val = 0; val < (1<<len)-1; val++) 8 { 9 int ch = getchar(); 10 if(ch == EOF) return 0; 11 if(ch == '\n' || ch == '\r') return 1; 12 13 code[len][val] = ch; 14 } 15 } 16 return 1; 17 } 18 int readint(int c) 19 { 20 int v = 0; 21 while(c--) 22 v = v*2+readchar()-'0'; 23 return v; 24 }
readchar()函数代码如下:
1 int readchar() 2 { 3 for(;;) 4 { 5 int ch = getchar(); 6 if(ch != '\n' && ch != '\t') return ch; 7 } 8 }
另外,Printcodes()函数本身对题目没有要求,但是对于调试代码是有用的。