游程(行程)长度编码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]=='*’) 判断语句也行,但我是绝对不这么干的~~~