用C语言编程:一个简单的数据压缩程序(急!!!)

对于一个存有非负整数的数据文件,按如下原则形成对应的压缩文件.
如有i个连续相同的数,则只把i和一个数存入压缩文件中
如有i个不连续相同的数,则把-i和i个数存入压缩文件中
例:原数据5 5 5 8 1 3 9 9 9 9 7 2 7 2 6 6 6
压缩为3 5 -3 8 1 3 4 9 -4 7 2 7 2 3 6
高分悬赏

第1个回答  2010-01-15
#include"stdio.h"
int c1(char a[],int i)
{int c=1;
while(a[i+1]==a[i])
{c++;i++;}
return c;
}

int c2(char a[],int i)
{int c=0;
while(a[i+1]!=a[i])
{c++;i++;}
return c;
}

int len(char a[])
{ int i=0;
while(a[i]!='\0')
i++;
return i;
}

main()
{char b[100];
char a[100]={'5','5','5','8','1','3','9','9','9','9','7','2','7','2','6','6','6'};
int i=0,j=0,k=0,s,c;
while(a[i]!='\0')
{
if(a[i+1]==a[i])
{
c=c1(a,i);
b[j]=c;
b[j+1]=a[i];
i++;j++;
}
else
{ c=c2(a,i);
b[j]=-c;
for(k=0;k<c;k++)
{b[j+1]=a[i];
i++;j++;}
}
i+=c;
}
s=len(b);
for(j=0;j<s;j++)
printf("%d",b[j]);
}
帮我看一下,哪里错了,谢谢
第2个回答  2010-01-19
#include "stdio.h"
int c1(char a[],int i)
{int c=1;
while(a[i+1]==a[i])
{c++;i++;}
return c;
}

int c2(char a[],int i)
{int c=0;
while(a[i+1]!=a[i])
{c++;i++;}
return c;
}

main()
{int b[100];
char a[100];
int i=0,j=0,k=0,s=0,c,n;
printf("please input n:");printf("\n");
scanf("%d\n",&n);;
for(i=0;i<n;i++)
scanf("%c",&a[i]);
printf("yuan shu ju:");
for(i=0;i<n;i++)
printf("%c ",a[i]);
i=0;
while(a[i]!='\0')
{
if(a[i+1]==a[i])
{
c=c1(a,i);
b[j]=c ;s++;
b[j+1]=a[i]-'0';s++;
j+=2;i+=c;
}
else
{ c=c2(a,i);
b[j]=-c;s++;j++;
for(k=0;k<c;k++)
{b[j]=a[i]-'0';s++;
j++;i++;}
}
}
printf("\n");
printf("ya suo hou de shu ju:");printf("\n");
for(j=0;j<s;j++)
printf("%d ",b[j]);
}
最后还差文件部分内容
第3个回答  2010-01-18
#include "stdio.h"
int c1(char a[],int i)
{int c=1;
while(a[i+1]==a[i])
{c++;i++;}
return c;
}

int c2(char a[],int i)
{int c=0;
while(a[i+1]!=a[i])
{c++;i++;}
return c;
}

int len(char a[])
{ int i=0;
while(a[i]!='\0')
i++;
return i;
}

main()
{int b[100];
char a[100]={'5','5','5','8','1','3','9','9','9','9','7','2','7','2','6','6','6'};
int i=0,j=0,k=0,s,c;
while(a[i]!='\0')
{
if(a[i+1]==a[i])
{
c=c1(a,i);
b[j]=c ;
b[j+1]=a[i]-'0';
i++;j++;
}
else
{ c=c2(a,i);
b[j]=-c;
for(k=0;k<c;k++)
{b[j+1]=a[i]-'0';
i++;j++;}
}
i+=c;
}
s=len(b);
for(j=0;j<s;j++)
printf("%d\t",b[j]);
}本回答被网友采纳
相似回答