030:编写函数(也可编写多个函数),实现对字符数组的降序排序后输出数组,再插入指定字符x,使得插入后的数组仍保持原序并输出数组,最后删除指定字符y(数组中可能存在多个y,都删除,并输出最终数组;也可能不存在,输出提示语)。在main函数中验证。要求:有效数组长度、x、y在main函数由键盘输入。(M)
排序算法很多,冒泡、选择排序等都可以用,插入元素逐个比较,插入位置的元素逐个后移;删除的时候,删除位置以后的元素逐个前移。
参考如下:
#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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!