每日一练6

字符串压缩与解压

  • 字符串压缩
#include 
#include 
#include 

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;k0 ) 
		j+=n-1;
	}

	str1[j]=0;
	printf("%s\n",str1);

	return 0;
}

你可能感兴趣的:(每日一练6)