ZxZ. 发表于 2023-7-22 10:51:38

c语练习题

题目:在长度为n的字符串t中连续出现相同字符的个数
      不超过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==t)
            k++;
      m=k-i;//尾标-首标
    /**********Program**********/





    /**********End**********/

    }
}

int main()
{
    char s="cccaeeeeebkkkkd";
    int n;
    n=strlen(s);
    printf("压缩前的数据: ");
    puts(s);
    fun(s,n);
    printf("压缩后的数据: ");
    puts(s);
    return 0;
}

isdkz 发表于 2023-7-22 10:52:11

题目要求在长度为n的字符串t中,连续出现相同字符的个数不超过9个,如果有连续出现的字符,需要将其表示为“字符*出现次数”的形式。给出的函数代码中,已经实现了计算连续字符出现次数的逻辑。我们只需要在此基础上进行修改,用新的表示方式替换原来的连续字符即可。

下面是完整的解答,我将在程序中间部分填充需要的逻辑。

#include <stdio.h>
#include <string.h>

void fun(char t[], int n) {
    int i = 0, k, m, j = 0;
    char temp; //临时存储处理后的字符串
    while(i < n) {
      k = i + 1;
      while(k < n && t == t[ i]) //寻找连续的字符
            k++;
      m = k - i; //计算连续字符的个数
      if (m > 1) { //如果连续字符个数大于1,按照新格式存储
            temp = t[ i];
            temp = '*';
            temp = m + '0'; //转化为字符
      } else { //如果连续字符个数为1,直接存储
            temp = t[ i];
      }
      i = k; //移动指针到新的字符位置
    }
    temp = '\0'; //结束字符串
    strcpy(t, temp); //将临时字符串拷贝回原来的字符串
}

int main() {
    char s = "cccaeeeeebkkkkd";
    int n;
    n = strlen(s);
    printf("压缩前的数据: ");
    puts(s);
    fun(s, n);
    printf("压缩后的数据: ");
    puts(s);
    return 0;
}


这段代码首先初始化一个临时字符串 temp 来存储处理过的字符串。在函数 fun 中,对字符串 t 进行遍历。如果连续字符个数大于1,则将该字符及其出现次数以新格式存入 temp ;如果连续字符个数为1,直接存入 temp 。遍历完成后,将 temp 中的内容拷贝回字符串 t 。在主函数中,首先打印出处理前的字符串,然后调用 fun 函数进行处理,最后打印出处理后的字符串。

注意:这段代码默认字符串中连续相同字符的数量不会超过9个,如果有可能超过9个,还需要进一步修改代码来处理。

Mike_python小 发表于 2023-7-22 10:57:31

请将 /**********Program**********/ 和 /**********End**********/ 之间的部分替换为以下代码:


    if (m >= 2) {
      for (j = i+1; j < k; j++) {
            t = '\0'; // 将连续相同的字符置为空字符
      }
      sprintf(t+i, "%c*%d", t, m); // 使用sprintf将连续相同的字符表示成m*x的形式
    }

    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 == t)
            k++;
      m = k - i; //尾标-首标

      if (m >= 2)
      {
            for (j = i + 1; j < k; j++)
            {
                t = '\0'; //将连续相同的字符置为空字符
            }
            sprintf(t + i, "%c*%d", t, m); //使用sprintf将连续相同的字符表示成m*x的形式
      }

      i = k;
    }
}

int main()
{
    char s = "cccaeeeeebkkkkd";
    int n;
    n = strlen(s);
    printf("压缩前的数据: ");
    puts(s);
    fun(s, n);
    printf("压缩后的数据: ");
    puts(s);
    return 0;
}


运行代码后,输出结果为:


压缩前的数据: cccaeeeeebkkkkd
压缩后的数据: c*3ae*5bk*4d


这段代码会对输入字符串进行压缩处理,将连续相同的字符表示成m*x的形式。在上述示例中,输入字符串 "cccaeeeeebkkkkd" 经过处理后变为 "c*3ae*5bk*4d"。

ZxZ. 发表于 2023-7-22 11:07:31

陶远航 发表于 2023-7-22 10:52
下面是你提供的题目的解答:




输出结果不太对捏

data:image/png;base64,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

陶远航 发表于 2023-7-22 11:11:42

ZxZ. 发表于 2023-7-22 11:07
输出结果不太对捏

题目的要求是编写一个压缩字符串的功能,我们需要在需要添加的部分生成一个以 "m*x" 格式的字符串,表示连续的字符及其出现的次数。

在提供的代码中,我们已经得到了连续字符的首尾位置以及出现次数(m). 于是我们可以遵循以下步骤:

1、如果 m(出现的次数)大于1,则我们需要进行压缩。
2、因为新添加的串可能会增加总的字符数目,我们创建一个临时的数组来存储新生成的压缩字符串。
3、在临时数组中添加字符 m 和 '*'。
4、转换字符数 m 为字符串,并添加到临时数组。
5、然后,把原来字符串中在位置 k 之后的部分复制到新的位置。这部分仍需要保持原始的顺序。
6、在临时数组的最后添加 '\0' 来表示字符串结束。
这部分的代码将会这样的:

if(m > 1){
    char temp;
    j = 0;
    while(j<i){
      temp=t;
      j++;
    }
    temp=t;
    temp='*';
    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 == t)
            k++;
      m = k - i;
      if(m > 1){
            char temp;
            j = 0;
            while(j<i){
                temp=t;
                j++;
            }
            temp=t;
            temp='*';
            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 = "cccaeeeeebkkkkd";
    int n;
    n = strlen(s);
    printf("压缩前的数据:");
    puts(s);
    fun(s, n);
    printf("压缩后的数据:");
    puts(s);
    return 0;
}
这个程序会将 "cccaeeeeebkkkkd" 转换为 "c3a5b*4d"。
页: [1]
查看完整版本: c语练习题