游程(行程)长度编码matlab(或者C++)实现
我需要的是算法实现,比如说我输入序列{1,0,0,0,0,1,1},输出为{11,04,12}.后面输出结果的含义是,"11"表示1的个数为1,"04"表示后面连续0的个数为4,"11"表示最后面出现连续1的次数为2次
#include
#include
#include
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 { if(data[m]=='1') { for(;data[m]=='1';m++) { count1++; } cout<<"S1"< count1=0; m--; } else { for(;data[m]=='0';m++) { count0++; } cout<<"S0"< 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]=='*’) 判断语句也行,但我是绝对不这么干的~~~