C語言編寫壓縮解壓字符串程序

一、壓縮函數編寫

   當輸入字符串時,讀取第一個字符,然後往後面數相同的字符,並記錄相同字符個數,直到出現一個不同的字符爲止,並記錄該字符以及個數;然後記錄讀取緊接下來不同與第一個的字符,並以此記錄後面連續是同一字符的個數,知道出現另一個不同的爲止;以此循環,寫入新的數列。(注意數列結尾一定要有'\0')代碼如下:

void Cn(char p[100], char* q)
{    
    int i = 0, j = 0;
    int flag = 1;
    char a = 0;
    while (p[i])
    {
        a = p[i];
        i++;
        while (a == p[i])
        {
            flag++;
            i++;
        }
        *(q + j) = a;
        j++;
        *(q + j) = 48 + flag;
        flag = 1;
        j++;
    }
    *(q + j) = '\0';
}

二、解壓函數的編寫

讀取壓縮後的字符串,奇數位爲字符,偶數位位相應字符的個數,一次輸入到新的數列;(注意數列結尾一定要有'\0')代碼如下:

void Dn(char p[100], char* q)
{
	int i = 0, j = 0;
    	char flag ;
    	char a = 0;
   	while (p[i])
   	{
        	a = p[i];
        	i++;
            	flag = p[i] ;
            	i++;
		flag = flag - '0';
        	while(flag--)
		{
			*(q + j) = a;
			j++;
		}
     
	}
    	*(q + j) = '\0';
}

三、代碼如下:

void Cn(char p[100], char* q);   //壓縮
void Dn(char p[100], char* q);   //解壓
int main()
{
    char str[100];
    char str1[100];
    char str3[100];
    gets(str);
    Cn(str, str1);
    printf("%s\n", str1);
    Dn(str1,str3);
    printf("%s\n", str3);
}
void Cn(char p[100], char* q)
{    
    int i = 0, j = 0;
    int flag = 1;
    char a = 0;
    while (p[i])
    {
        a = p[i];
        i++;
        while (a == p[i])
        {
            flag++;
            i++;
        }
        *(q + j) = a;
        j++;
        *(q + j) = 48 + flag;
        flag = 1;
        j++;
    }
    *(q + j) = '\0';
}
void Dn(char p[100], char* q)
{
	int i = 0, j = 0;
    	char flag ;
    	char a = 0;
   	while (p[i])
   	{
        	a = p[i];
        	i++;
            	flag = p[i] ;
            	i++;
		flag = flag - '0';
        	while(flag--)
		{
			*(q + j) = a;
			j++;
		}
     
	}
    	*(q + j) = '\0';
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章