第一种:
include <stdio.h>
#include <string.h>
#include <stdlib.h>
void my_zip(char *p)
{
char *q=p;
int n=1;
while(*q)
{
if(*q==*(q+1))
{
n++;
}
else
{
*p++=*q;
if(1<n && n<10)
{
*p++=n+'0';
}
else if(10<=n && n<100)
{
*p++=n/10+'0';
*p++=n%10+'0';
}
n=1;
}
q++;
}
*p=0;
}
int main(int argc, char *argv[])
{
char arr[64];
fgets(arr,64,stdin);
// gets(arr);
my_zip(arr);
puts(arr);
return 0;
}
第二种:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* zip(char *p,int num);
int main(int argc, char *argv[])
{
char arr[32];
printf(">:");
fgets(arr,32,stdin);
int len=strlen(arr);
char *p=zip(arr,len);
printf("压缩后");
puts(p);
}
char* zip(char *p,int num)
{
int i=0,j;
int count=1;
int flag=0;
while(1)
{
if(p[i]==0)
break;
if(p[i]==p[i+1])
{
flag=1;
for(j=i+1;p[j];j++)
if(p[i]==p[j])
{
count++;
}
else
break;
}
if(flag==1)
{
p[i+1]=count+'0';
for(j=i+2;p[j];j++)
{
p[j]=p[j+count-2];
}
i=i+1;
flag=0;
count=1;
}
i++;
}
return p;
}