#include<iostream.h>
#include<string.h>
#include<conio.h>
int array_length;//输入字符串长度
int unit_length;//词典长度
char str_array[100];//存放输入字符串
char str_unit[100][14];//存放词典字符
char prefix[14];
void release() //释放重要变量空间,以免有不安全数据影响运行结果
{
char str_element[100];
for(int id=0;id<100;id++)
{str_array[id]=NULL;str_element[id]=NULL;}
for(id=0;id<100;id++)
{
for(int j=0;j<14;j++)
{str_unit[id][j]=NULL;}
}
}
void putin() //输入字符串
{
cout<<"请输入数据:";
cin>>str_array;
cout<<"------------------------------"<<"\n";
array_length=strlen(str_array);
cout<<"数据的长度:"<<array_length<<endl;
cout<<"------------------------------"<<"\n";
}
void single_dic()//对单个字符编码
{
int flag; //标志位
int tmp_length=1;
char ch_temp;
char str_element[100];//暂存词典
str_element[0]=str_array[0];
for(int i=0;i<array_length;i++)
{
unit_length=tmp_length;
ch_temp=str_array[i];
for(int i1=0;i1<unit_length;i1++)
{
if(ch_temp==str_element[i1])//判断字符是否已经在词典中
{flag=0;break;}
else {flag=1;}
}
if(flag==1)//字符不在词典中,则将字符加入词典中
{
str_element[unit_length]=ch_temp;
tmp_length=tmp_length+1;
}
}
for(i=0;i<tmp_length;i++)
{str_unit[i][0]=str_element[i];}
unit_length=tmp_length;
cout<<"输出码字:\t";
}
void mul_dic()//对于多字符串编码
{
int flag; //标志位
int w_length=1;
char ch_tmp_k;
int temp_code=1;
for(int i=0;i<=array_length;i++)
{
if(w_length==1)
{
if(i==0)//如果当前字符是第一个字符,则前缀时空的
{ch_tmp_k=str_array[i];}
if(i!=0)
{ch_tmp_k=str_array[i-1];i--;}
}
if(w_length>1)
{ch_tmp_k=str_array[i];}
prefix[w_length-1]=ch_tmp_k;//存放缀符
w_length++;
for(int i1=0;i1<unit_length;i1++)
{
for(int i2=0;i2<w_length;i2++)
{
if(prefix[i2]==str_unit[i1][i2])//缀-符串是否在词典中
{flag=1;}
else {flag=0;break;}
}
if(flag==1)//在词典中,计算码号
{temp_code=i1+1;break;}
}
if(i==array_length)
{cout<<temp_code<<" ";}
if(flag==0)//不再词典中
{
cout<<temp_code<<" ";
for(int i3=0;i3<w_length;i3++)
{str_unit[unit_length][i3]=prefix[i3];}
for(int i4=0;i4<14;i4++)//----------释放变量 str_tmp_w空间,以备继续使用.
{prefix[i4]=NULL;}
unit_length=unit_length+1;
w_length=1;
}
}
}
void output()
{
int el_unit_length;//词典里词的长度
cout<<"------------------------------"<<"\n";
cout<<"编码字串表:"<<endl;
for(int j=0;j<unit_length;j++)
{
cout<<j+1<<" - ";
el_unit_length=strlen(str_unit[j]);
for(int j1=0;j1<el_unit_length;j1++)
{cout<<str_unit[j][j1];}
cout<<endl;
}
cout<<"------------------------------"<<"\n";
}
void main()
{
release();
putin();
if(array_length>96)
{cout<<"数据溢出!"<<endl;}
else if(array_length>0&&array_length<=96)
{
single_dic();
mul_dic();
cout<<endl;
output();
}
}