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 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。