m0_63799167 2022-03-01 17:38 采纳率: 100%
浏览 72
已结题

C语言函数降序数组插入字符删去字符

030:编写函数(也可编写多个函数),实现对字符数组的降序排序后输出数组,再插入指定字符x,使得插入后的数组仍保持原序并输出数组,最后删除指定字符y(数组中可能存在多个y,都删除,并输出最终数组;也可能不存在,输出提示语)。在main函数中验证。要求:有效数组长度、x、y在main函数由键盘输入。(M)

  • 写回答

2条回答 默认 最新

  • 关注

    排序算法很多,冒泡、选择排序等都可以用,插入元素逐个比较,插入位置的元素逐个后移;删除的时候,删除位置以后的元素逐个前移。
    参考如下:

    img

    #include <stdio.h>
    #include <stdlib.h>
    //冒泡排序,降序
    void bubblesort(char buf[],int n)
    {
        int i,j;
        char ch;
        for (i=0;i<n-1;i++)
        {
            for (j=0;j<n-1-i;j++)
            {
                if(buf[j] < buf[j+1])
                {
                    ch = buf[j];
                    buf[j]=buf[j+1];
                    buf[j+1]=ch;
                }
            }
        }
    }
    
    //插入元素x
    void insert(char buf[],int *n,char x)
    {
        int i,j;
        for (i=0;i<*n;i++)
        {
            if(x > buf[i])
            {
                for(j=*n;j>i;j--)
                    buf[j] = buf[j-1];
                buf[i]=x;
                (*n) += 1;
                buf[*n]=0;
                break;
            }
        }
    }
    
    //删除元素
    void del(char buf[],int *n,char y)
    {
        int i,j;
        for (i=*n-1;i>=0;i--)
        {
            if(buf[i]==y)
            {
                for(j=i;j<*n-1;j++)
                    buf[j]=buf[j+1];
                buf[*n-1]=0;
                *n = *n -1;
                i++;
            }
        }
    }
    
    int main()
    {
        char* p;
        int n;
        char x,y;
        printf("请输入数组长度:");
        while(1)
        {
            scanf("%d",&n);
            if(n<=0)
                printf("输入不合法,请重新输入:");
            else
                break;
        }
        
    
        p = (char*)malloc(n+2); //多申请2个字节,一个给\0,一个插入使用
        printf("请输入字符数组:");
        scanf("%s",p);
        //排序
        bubblesort(p,n);
        printf("排序后的字数组:%s\n",p);
        //插入数据
        fflush(stdin);//清空输入缓存
        printf("请输入需要插入的字符:");
        x = getchar();
        getchar();//接收回车符
        insert(p,&n,x);
        printf("插入%c后的字符数组:%s\n",x,p);
        //删除元素
        printf("请输出需要删除的字符:");
        y = getchar();
        getchar();
        del(p,&n,y);
        printf("删除%c后的字符数组:%s\n",y,p);
        //释放空间
        free(p);
        p=0;
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月1日
  • 已采纳回答 3月1日
  • 创建了问题 3月1日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)