通过键盘输入一个字符串,请编写一个字符串压缩程序,将字符串中连续出现的重复小写字母(a~z)进行压缩,并输出压缩后的字符串。压缩规则如下:
1)仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2)压缩字段的格式为"字符重复的次数+字符"。
【输入】字符串
【输出】压缩后的字符串
示例: 输入:"cccddecc”,输出:"3c2de2c"
输入:“AAA”,输出:"AAA"**
通过键盘输入一个字符串,请编写一个字符串压缩程序,将字符串中连续出现的重复小写字母(a~z)进行压缩,并输出压缩后的字符串。压缩规则如下:
1)仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2)压缩字段的格式为"字符重复的次数+字符"。
【输入】字符串
【输出】压缩后的字符串
示例: 输入:"cccddecc”,输出:"3c2de2c"
输入:“AAA”,输出:"AAA"**
#include <stdio.h>
#include <string.h>
#define LEN 100
void stringZip(char *pInputStr, long lInputLen, char *pOutputStr)
{
char *p = pInputStr;
int num = 1;
int i = 0;
int size;
int temp;
int j;
while (*p != '\0')
{
while (*p == *(p + 1) && *p != '\0' && *p >= 'a' && *p <= 'z')
{
num++;
p++;
}
if (num > 1)
{
size = 0;
temp = num;
while (num)
{
size++;
num /= 10;
}
num = 1;
for (j = size; j > 0; j--)
{
pOutputStr[i + j - 1] = '0' + temp % 10;
temp /= 10;
}
i += size;
pOutputStr[i++] = *p;
p++;
}
else
{
pOutputStr[i++] = *p;
p++;
}
}
pOutputStr[i] = '\0';
}
int main()
{
char pInputStr[LEN];
char pOutputStr[LEN];
gets(pInputStr);
stringZip(pInputStr, strlen(pInputStr), pOutputStr);
printf("%s\n", pOutputStr);
return 0;
}