📄 游程编码.cpp
字号:
3//像素里的白用字符‘1’表示,黑用‘0’表示
#include<stdio.h>
typedef struct
{
int length;
char *MH;
}form;
void buildform(form *white,form *blcak) //暂只创建了表的前32行(所以运行时游程的长度不要超过31)
{
int i;
for(i=0;i<32;i++)
{
white[i].length=i;
blcak[i].length=i; //填黑白MH表里的游程长度
}
white[0].MH="00110101";
white[1].MH="000111";
white[2].MH="0111";
white[3].MH="1000";
white[4].MH="1011";
white[5].MH="1100";
white[6].MH="1110";
white[7].MH="1111";
white[8].MH="10011";
white[9].MH="10100";
white[10].MH="00111";
white[11].MH="01000";
white[12].MH="001000";
white[13].MH="000011";
white[14].MH="110100";
white[15].MH="110101";
white[16].MH="101010";
white[17].MH="101011";
white[18].MH="0100111";
white[19].MH="0001100";
white[20].MH="0001000";
white[21].MH="0010111";
white[22].MH="0000011";
white[23].MH="0000100";
white[24].MH="0101000";
white[25].MH="0101011";
white[26].MH="0010011";
white[27].MH="0100100";
white[28].MH="0011000";
white[29].MH="00000010";
white[30].MH="00000011";
white[31].MH="00011010";
blcak[0].MH="0000110111";
blcak[1].MH="010";
blcak[2].MH="11";
blcak[3].MH="10";
blcak[4].MH="011";
blcak[5].MH="0011";
blcak[6].MH="0010";
blcak[7].MH="00011";
blcak[8].MH="000101";
blcak[9].MH="000100";
blcak[10].MH="0000100";
blcak[11].MH="0000101";
blcak[12].MH="0000111";
blcak[13].MH="00000100";
blcak[14].MH="00000111";
blcak[15].MH="000011000";
blcak[16].MH="0000010111";
blcak[17].MH="0000011000";
blcak[18].MH="0000001000";
blcak[19].MH="00001100111";
blcak[20].MH="00001101000";
blcak[21].MH="00001101100";
blcak[22].MH="00000110111";
blcak[23].MH="00000101000";
blcak[24].MH="00000010111";
blcak[25].MH="00000011000";
blcak[26].MH="000011001010";
blcak[27].MH="000011001011";
blcak[28].MH="000011001100";
blcak[29].MH="000011001101";
blcak[30].MH="000001101000";
blcak[31].MH="000001101001";
}
void main()
{
int i,k,m;
char input[1728];
form white[32];
form blcak[32]; //定义黑白表结构题数组,(完整的黑白数组应分别有92个元素)
buildform(white,blcak) ;
for(i=0;i<1728;i++) //为操作简便,运行时输入的黑白总个数不要超过常规文本的一行,即1728个像素
{
scanf("%c",&input[i]);
if(input[i]=='\n')break;
}
k=i;
if(input[0]=='0')printf("%s",white[0].MH);
i=0;
for(;i<k;)
{
while(input[i]=='1')
{
m=0;
for(;i<k;i++)
{
if(input[i]=='1')m++;
else break;
}
printf("%s",white[m].MH);
}
while(input[i]=='0')
{
m=0;
for(;i<k;i++)
{
if(input[i]=='0')m++;
else break;
}
printf("%s",blcak[m].MH);
}
}
}
/*几组测试数据
一 黑白文本 0111
译码 00110101 010 1000
二 黑白文本 01110
译码 00110101 010 1000 010
三 黑白文本 1110110
译码 1000 010 0111 010
四 黑白文本 111111111111111111100000
译码 1010110011
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -