#include <stdio.h >
#include <string.h>
void main ()
{
char arr[][10]={"America","England","Chian","Japan","France"},tmp=NULL;
char (ptr)[10]=arr;
short i,j,k;
printf("排序前:");
for(i=0;i<5;i++,ptr++)
printf("%s\n",*ptr);
for(i=0;i<4;i++)
{
k=i;
for(j=i+1;j<5;j++)
if(strcmp(*(ptr+i),*(ptr+j))>0)
k=j;
if(k!=i)
{
strcpy(tmp,(ptr+i));
strcpy((ptr+i),(ptr+k));
strcpy((ptr+k),tmp);
}
}
for(i=0;i<5;i++,ptr++)
printf("%s\n",*ptr);
getch();
}
如何用二维数组、数组指针进行选择法排序。为何是无法修改的左值?怎么改?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 技术专家团-小桥流水 2022-01-19 11:59关注
代码丢失了很多星号,不知道到底有多少错误,明显的基础错误如下:
(1)temp没有申请空间
(2)排序前,需要把ptr重置一下,排序时,内层for循环的if语句 if(strcmp( *(ptr+i), *(ptr+j))>0)这里不应该用 ptr+i,而是ptr+k,每次比较应该是与当前最小值比较,而不是跟 ptr+i比较。
(3)最后输出的时候,需要把ptr重新赋值一下
代码贴在下面,修改的部分在代码中有注释。
运行结果:代码修改如下:
#include <stdio.h > #include <string.h> void main () { char arr[][10]={"America","England","Chian","Japan","France"},tmp[10];//修改1 给tmp一块内存空间 char (*ptr)[10]=arr; short i,j,k; printf("排序前:"); for(i=0;i<5;i++,*ptr++) printf("%s\n",*ptr); ptr = arr; //修改2 重置ptr for(i=0;i<4;i++) { k=i; for(j=i+1;j<5;j++) { if(strcmp(*(ptr+k),*(ptr+j))>0) //修改3 ptr+i改成 ptr+k,每次都是跟当前最小值进行比较 k=j; } if(k!=i) { strcpy(tmp,*(ptr+i)); strcpy(*(ptr+i),*(ptr+k)); strcpy(*(ptr+k),tmp); } } ptr = arr; //修改4 重置ptr for(i=0;i<5;i++,ptr++) printf("%s\n",*ptr); getchar(); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 slaris 系统断电后,重新开机后一直自动重启
- ¥15 51寻迹小车定点寻迹
- ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
- ¥15 关于vue2中methods使用call修改this指向的问题
- ¥15 idea自动补全键位冲突
- ¥15 请教一下写代码,代码好难
- ¥15 iis10中如何阻止别人网站重定向到我的网站
- ¥15 滑块验证码移动速度不一致问题
- ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
- ¥15 麒麟V10桌面版SP1如何配置bonding