皮皮网
皮皮网

【易语言传奇4源码】【偷补丁源码】【自贡源码建站】lzw c 源码

来源:一键证件照源码 发表时间:2024-12-24 10:07:29

1.lzw c Դ?源码易语言传奇4源码?

lzw c 源码

lzw c Դ??

       以下是哈夫曼编码

       #include<iostream>

       #include<math.h>

       #include<string>

       #include<iomanip>

       using namespace std;

       int n;

       int isin(string str,char a)

       {

        int temp=0;

        for(int i=0;i<str.length();i++)

        {

        if(str[i]==a) temp=1;

        }

        return temp;

       }

       void bubble(double p[],string sign[])//排序

       {

        for(int i=0;i<n-1;i++)

        {

        for(int j=i+1;j<n;j++)

        {

        if(p[i]<p[j])

        {

        double temp=p[i];

        p[i]=p[j];

        p[j]=temp;

        string m=sign[i];

        sign[i]=sign[j];

        sign[j]=m;

        }

        }

        }

       }

       void huff(double tempp[],string tempstr[])

       {

        double p[][];

        string sign[][];

        sign[0][i]=tempstr[i]; //符号放在sign数组中

        for(int i=0;i<n;i++)

        {

        p[0][i]=tempp[i]; //p数组放对应的概率(第1列中)

        }

        for(i=0;i<n-1;i++)

        {

        bubble(p[i],sign[i]); //第一次排序

        for(int j=0;j<n-2-i;j++)

        {

        p[i+1][j]=p[i][j]; //前n-2-i个概率重新放在p数组中(是数组的第2列中)

        sign[i+1][j]=sign[i][j];

        }

        p[i+1][j]=p[i][j]+p[i][j+1];//第一次两个最小概率求和

        sign[i+1][j]=sign[i][j]+sign[i][j+1];//符号跟随

        for(j=n-1-i;j<n;j++)

        {

        p[i+1][j]=0;

        }

        }

        string final[];

        for(i=n-2;i>=0;i--)

        {

        for(int k=0;k<n;k++)

        {

        if(isin(sign[i][n-2-i],sign[0][k][0])) final[k]+="0";

        if(isin(sign[i][n-1-i],sign[0][k][0])) final[k]+="1";

        }

        }

        cout<<setw(9)<<"哈弗曼编码如下:"<<endl;

        for(i=0;i<n;i++)

        {

        cout<<setw(7)<<sign[0][i]<<setw(7)<<p[0][i]<<setw()<<final[i]<<

        setw(7)<<final[i].length()<<endl;

        }

       }

       void main()

       {

        char a[];

        cout<<"该字符串符号为:";

        cin>>a;

        string s=a;

        n=s.length();

        char b[][2];

        for(int i=0;i<n;i++)

        {

        b[i][0]=a[i];

        b[i][1]='\0';

        }

        string str[];

        for(i=0;i<n;i++)

        {

        str[i]=b[i];

        }

        double tempp[];

        cout<<"字符概率依次为:";

        for(i=0;i<n;i++)

        {

        cin>>tempp[i];

        }

        huff(tempp,str);

       }

相关栏目:知识