首页 > 代码库 > 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 (输入字符串并对单个字符进行操作的输入输出)