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

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

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

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;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632