采用C语言进行字符串压缩

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".
2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"

示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”

C++回答

#include
#include
int main()
{
char a[1005];
int len,i,sum=0;
gets(a);
len=strlen(a);
for(i=0;i<=len-1;i++){
sum++;
if(a[i+1]!=a[i]){
if(sum==1){
printf("%c",a[i]);
sum=0;
}
else{
printf("%d%c",sum,a[i]);
sum=0;
}
}
}
}

前两行是cstdio和cstring

我不讲代码,只说思路。
1.输入需要一个字符数组去存 input,需要一个字符长度inputLen
2.输出需要也个字符数组去存 output,需要一个字符长度outLen
3. 读入第一个字符 ch
4.读入第二个字符 oldCh
5.重复字符的记录count
6.循环变量i定位input,j定位output
接下来是算法:
while(i < inputlen)
{
//ch,oldCh赋初值
ch = input[i];
oldCh=input[i+1];
//相等计数器加1
if (ch == oldCh)
{
count++;
}
else
{
if (count != 0) {
转换为字符存入output[j];
count=0;
output[j+1] = ch;
j += 2;
}
output[j] = ch;
ch = oldCh;
oldCh=input[i+2];
}
i++
}

#include <stdio.h>
int main()
{
    char a[1000]= {'\0'};
    scanf("%s",a);
    char result[1000]= {'\0'};
    int i=0;
    int j=1;
    char state;
    int length=0;
    for(i=0; i<1000&&a[i]!='\0'; i++)
    {
        state=a[i];
        if(i<999&&a[i]==a[i+1])
        {
            j+=1;
        }
        else
        {
            if(j==1)
            {
                result[length]=state;
                length+=1;
            }
            else if(j<10)
            {

                result[length]=j+'30';
                result[length+1]=state;
                length+=2;
            }
            else if(j<100){
                result[length]=j/10+'30';
                result[length+1]=j%10+'30';
                result[length+2]=state;
                length+=3;

            }else if(j<1000){
                result[length]=j/10+'30';
                result[length+1]=j/100+'30';
                result[length+2]=j%100+'30';
                result[length+3]=state;
                length+=4;

            }
            j=1;
        }
    }
    for(i=0; i<1000; i++)
    {
        printf("%c   ",result[i]);
    }
    return 0;
}

#include
#include

int main()
{
char inputBuf[100]="";
char outputBuf[100]="";
int i=0;
gets(inputBuf);//获取输入的字符串
int inputLength=strlen(inputBuf);//求出字符串长度

    char tempBuf[2];//临时存放重复出现的字符串如:2a 、 3b这种
    int count;//记录看是否有重复出现的字母个数,没有的话就等于1,有的话就大于1
    int outbufNumber=0;//输出的字符串的个数
    for (i=0;i<inputLength;i++)
    {
        count=1;//每次寻找都要把计数置为1
        while(inputBuf[i]==inputBuf[i+1])//循环,直到两个相邻字母不想同
        {
            count++;//每找到一个,计数加一
            i++;//比较后续两个
        }
        if (count!=1)//如果有重复出现的
        {
            sprintf(tempBuf,"%d%c",count,inputBuf[i]);//格式化为 2a、3b这中字符串
            strcat(outputBuf,tempBuf);//连接到outputBuf后面
            outbufNumber+=2;//outputBuf中的字符个数加2(这里只适合个数不超过10个的)
        }
        else//没有重复出现的
        {
            outputBuf[outbufNumber]=inputBuf[i];//把字母加到outputBuf的后面
            outbufNumber++;//计数加1
        }
    }
    printf("%s",outputBuf);//输出
    getchar();
    return 0;

}
这个程序只适用于重复出现的字符个数不超过10个,不过你可以自己修改修改。