首页 > 代码库 > UVA - 213 Message Decoding (输入字符串并对单个字符进行操作的输入输出)
UVA - 213 Message Decoding (输入字符串并对单个字符进行操作的输入输出)
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 0x7fffffff21 #define maxn 101022 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()函数本身对题目没有要求,但是对于调试代码是有用的。
UVA - 213 Message Decoding (输入字符串并对单个字符进行操作的输入输出)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。