一、壓縮函數編寫
當輸入字符串時,讀取第一個字符,然後往後面數相同的字符,並記錄相同字符個數,直到出現一個不同的字符爲止,並記錄該字符以及個數;然後記錄讀取緊接下來不同與第一個的字符,並以此記錄後面連續是同一字符的個數,知道出現另一個不同的爲止;以此循環,寫入新的數列。(注意數列結尾一定要有'\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';
}