题目:
对字符串进行压缩。
例如:
原字符串:aabccaddd
压缩后字符串:2ab2ca3d
解题思路:
这个题目关键点在于确定某个字符在字符串中出现的次数。
关于这一点,主要采用在指针遍历字符数组过程中,去判断当前指针指向的字符与下一个字符是否相同来实现的,如果相同则负责计数的count+1,并且记录对应字符。
然后是如何处理压缩后字符串的问题,最初我只是将字符和对应的个数都存储在了一个字符数组中,但这种存储方式在字符连续个数很多时,例如:aaaaaaaaaa压缩后为10a。对于这种个数不只一位的字符,其个数存储在字符数组中需要对不同的位进行拆解才行。
后面我改用了一个整型数组和一个字符型数组来分别存储字符个数和字符。以后可能会用到结构体的相关知识来试着对结果进行处理。
程序代码:
#include <stdio.h>
void zip_fun(char *);
int main(int argc, char *argv[])
{
char a[50];
puts("请输入想要进行压缩的字符串:");
gets(a);
puts("经过压缩后的字符串为:");
zip_fun(a);
return 0;
}
void zip_fun(char a[])
{
int count = 1, i = 0,j = 0;
char b[50] = {'\0'};
int c[50] = {0};
char *p = a;
while(*p != '\0')
{
while(*p == *(p+1)){
count++;
p++;
}
c[j] = count;
j++;
count = 1;
b[i] = *p;
i++;
p++;
}
for(i = 0; b[i] != '\0'; i++){
if(c[i] != 1 && c[i] != 0)
{
printf("%d",c[i]);
}
printf("%c",b[i]);
}
putchar('\n');
}
运行结果:
请输入想要进行压缩的字符串:
aaaaaaaaaaaaaa
经过压缩后的字符串为:
14a
请输入想要进行压缩的字符串:
abcdef
经过压缩后的字符串为:
abcdef
请输入想要进行压缩的字符串:
aabccaab
经过压缩后的字符串为:
2ab2c2ab