一个小问题,求各位帮忙解答。。
下边这个程序的解压缩部分为什么运行不出来呢?
如果把解压缩部分单独运行的话就可以?为什么呢?
是不是cin.get()的问题啊,求大大解释。。。
压缩部分让我去掉了!~
程序题目如下:游程压缩就是将一连串重复出现的比特压缩为一个计数值,例如可以将 1110011111000001
按(3,2,5,5,1)的分割按照 3 比特计数长度压缩为 011 010 101 101 001。设计一个程序可对文件
进行游程压缩并输出为压缩文件,以及对已压缩文件的解压,尽可能实现比较高的压缩率。
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
//主函数
int main()
{
void yasuo();
void jieyasuo();
int m,a;
do
{
cout<<"选择压缩请按1,解压缩请按2:";
cin>>m;
switch(m)
{
case 1:yasuo();break;
case 2:jieyasuo();break;
}
cout<<"是否继续进行操作,是请按1,否请按0:";
cin>>a;
}while(a==1);
return 0;
}
//解压缩
void jieyasuo()
{
cout<<"请输入比特串:";
char a[100],b[100];
int c[100];
int i=0,j=2,l=0,n=0,k=0,p=0,q=0,x=0;
while((a[l]=cin.get())!='\n')
{
l++;
}
while (i<=l)
{
if((a[i]=='1')||(a[i]=='0'))
{
b[x]=a[i];
n=n+(b[x]-'0')*pow(2,j);
x++;
j--;
}
else
{
c[k]=n;
k++;
n=0;
j=2;
}
i++;
}
for(int y=0;y<k;y++)
cout<<c[y]<<" ";
cout<<endl;
char d='1',f='0';
for(q=0;q<k;q++)
{
for(p=0;p<c[q];p++)
{
if(q%2==0)
cout<<d;
else
cout<<f;
}
}
cout<<endl;
}
[解决办法]
cin.get();
while((a[l]=cin.get())!='\n')
{
l++;
}
解压缩获取输入前加一个cin.get(); 过滤掉回车