|  | 
 
| 
题目:在长度为n的字符串t中连续出现相同字符的个数
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  不超过9个,函数void fun(char t[],int n)按
 如下规则进行处理,若有连续出现两个及以上相
 同的字符时,将这些连续的字符表示成m*x的形式
 (m为该字符,x为该字符出现的次数)。
 
 例如:原字符串为"cccaeeeeebkkkkd",经过处理后的字符串为
 "c*3ae*5bk*4d"。
 在 /**********Program**********/
 
 
 
 
 
 /**********  End  **********/
 中填空
 #include <stdio.h>
 #include <string.h>
 void fun(char t[],int n)
 {
 int i,k,m,j;
 i=0;
 while(i<n-1)
 {
 k=i+1;
 while(t[k]==t[i])
 k++;
 m=k-i;//尾标-首标
 /**********Program**********/
 
 
 
 
 
 /**********  End  **********/
 
 }
 }
 
 int main()
 {
 char s[100]="cccaeeeeebkkkkd";
 int n;
 n=strlen(s);
 printf("压缩前的数据: ");
 puts(s);
 fun(s,n);
 printf("压缩后的数据: ");
 puts(s);
 return 0;
 }
 
 
题目的要求是编写一个压缩字符串的功能,我们需要在需要添加的部分生成一个以 "m*x" 格式的字符串,表示连续的字符及其出现的次数。
 
在提供的代码中,我们已经得到了连续字符的首尾位置以及出现次数(m). 于是我们可以遵循以下步骤:
 
1、如果 m(出现的次数)大于1,则我们需要进行压缩。 
2、因为新添加的串可能会增加总的字符数目,我们创建一个临时的数组来存储新生成的压缩字符串。 
3、在临时数组中添加字符 m 和 '*'。 
4、转换字符数 m 为字符串,并添加到临时数组。 
5、然后,把原来字符串中在位置 k 之后的部分复制到新的位置。这部分仍需要保持原始的顺序。 
6、在临时数组的最后添加 '\0' 来表示字符串结束。 
这部分的代码将会这样的:
 复制代码if(m > 1){
    char temp[100];
    j = 0;
    while(j<i){
        temp[j]=t[j];
        j++;
    }
    temp[j++]=t[i];
    temp[j++]='*';
    sprintf(temp+j, "%d", m);
    j += strlen(temp+j);
    strcpy(temp+j, t+k);
    strcpy(t, temp);
    n = strlen(t);
}
i=k;
所以完整的程序应当如下:
 复制代码#include<stdio.h>
#include<string.h>
void fun(char t[], int n){
    int i, k, m, j;
    i = 0;
    while(i < n-1){
        k = i + 1;
        while(t[k] == t[i])
            k++;
        m = k - i;
        if(m > 1){
            char temp[100];
            j = 0;
            while(j<i){
                temp[j]=t[j];
                j++;
            }
            temp[j++]=t[i];
            temp[j++]='*';
            sprintf(temp+j, "%d", m);
            j += strlen(temp+j);
            strcpy(temp+j, t+k);
            strcpy(t, temp);
            n = strlen(t);
        }
        i=k;
    }
}
int main(){
    char s[100] = "cccaeeeeebkkkkd";
    int n;
    n = strlen(s);
    printf("压缩前的数据:");
    puts(s);
    fun(s, n);
    printf("压缩后的数据:");
    puts(s);
    return 0;
}
这个程序会将 "cccaeeeeebkkkkd" 转换为 "c3a5b*4d"。 | 
 |