字符串压缩与解压
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void test(char *buf,char **prnt)
{
int res_len = 0, ori_len = 0;
char *res = NULL;
int i;
char tmp_c = 0;
int tmp_count=0;
char tmpbuf[10];
ori_len = strlen(buf);
res = malloc(ori_len * 2);
if (res == NULL)
return;
memset(res, 0, ori_len * 2);
tmp_c = buf[0];
for (i = 0; i < ori_len+1; i++)
{
if (tmp_c == buf[i])
tmp_count++;
else
{
memset(tmpbuf, 0, sizeof(tmpbuf));
sprintf(tmpbuf, "%c%d", tmp_c, tmp_count);
strcat(res, tmpbuf);
tmp_c = buf[i];
tmp_count = 1;
}
}
res_len = strlen(res);
if (res_len < ori_len)
*prnt = res;
else
*prnt = buf;
}
int main(void)
{
char buf[100];
char *res = NULL;
memset(buf, 0, sizeof(buf));
scanf("%s",buf);
test(buf,&res);
printf("%s\n", res);
return 0;
}
int main1()
{
char str[256],str1[256];
int i,j,k,n;
scanf("%s",str);
i=j=0;
while ( str[i] )
{
str1[j]=str[i];
j++;
i++;
n=0;
while ( str[i]>='0' && str[i]<='9' )
{
n*=10;
n+=str[i]-'0';
i++;
}
for ( k=0;k<n-1;k++ )
str1[j+k]=str1[j-1];
if ( n>0 )
j+=n-1;
}
str1[j]=0;
printf("%s\n",str1);
return 0;
}