报告论文:游程(行程)长度编码matlab(或者C++)实现

游程(行程)长度编码matlab(或者C++)实现

 

我需要的是算法实现,比如说我输入序列{1,0,0,0,0,1,1},输出为{11,04,12}.后面输出结果的含义是,”11″表示1的个数为1,”04″表示后面连续0的个数为4,”11″表示最后面出现连续1的次数为2次

 

#include<iostream>

#include <sstream>

#include <string>

using namespace std;

 

string itostring(int x)

{

       std::ostringstream o;

    if (o << x)

       {

              return o.str();// 把x转换成1位字符输出

       }

       return 0;

}

 

 

int strlen(char str[])

{

        int i,leng;

        i=0;

        while(str[i]!=’\0′)

        i=i+1;

        leng=i;

        return(leng);

 

}

 

void main()

{

       int m=0,Len,j,n,count0=0,count1=0,b[100];

       cout<<“请输入一些二进制数据:\n”;

       char data[100];

       cin >>data;

       Len=strlen(data);

       for(m=0;m<Len;m++)

       {

              if(data[m]==’1′)

              {

                     for(;data[m]==’1′;m++)

                     {

                            count1++;

                     }

                     cout<<“S1″<<itostring(count1);

                     count1=0;

                     m–;

              }

             

              else

              {

                     for(;data[m]==’0′;m++)

                     {

                            count0++;

                     }

                     cout<<“S0″<<itostring(count0);

                     count0=0;

                     m–;

              }

       }

 

}

运行结果:

 

请输入一些二进制数据:

111100001110011

S14S04S13S02S12  Press any key to continue

 

注意:

我们考虑0、1序列中连续的1或0的个数超过 10个,如果超过会得出这样的结果:

请输入一些二进制数据:

1111100000000000011111111111100000

S15S012S112S05  Press any key to continue

这种结果也是可以接受的,我们用S1标识二进制“1”的个数,S0标识二进制“0”的个数。

 

需要解决的问题是:

    怎么解决我们输入序列是任意字符 ,当然,你按照我的算法,在后面填加N 多个if(data[m]==’*’) 判断语句也行,但我是绝对不这么干的~~~

    原文作者:游程编码问题
    原文地址: https://blog.csdn.net/ctfysj/article/details/81299438
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞