030:编写函数(也可编写多个函数),实现对字符数组的降序排序后输出数组,再插入指定字符x,使得插入后的数组仍保持原序并输出数组,最后删除指定字符y(数组中可能存在多个y,都删除,并输出最终数组;也可能不存在,输出提示语)。在main函数中验证。要求:有效数组长度、x、y在main函数由键盘输入。(M)
2条回答 默认 最新
- 技术专家团-小桥流水 2022-03-01 17:53关注
排序算法很多,冒泡、选择排序等都可以用,插入元素逐个比较,插入位置的元素逐个后移;删除的时候,删除位置以后的元素逐个前移。
参考如下:#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