Made in heaven!! 2022-01-19 11:14 采纳率: 80%
浏览 18
已结题

如何用二维数组、数组指针进行选择法排序。为何是无法修改的左值?怎么改?

#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();
}

  • 写回答

2条回答 默认 最新

  • 关注

    代码丢失了很多星号,不知道到底有多少错误,明显的基础错误如下:
    (1)temp没有申请空间
    (2)排序前,需要把ptr重置一下,排序时,内层for循环的if语句 if(strcmp( *(ptr+i), *(ptr+j))>0)这里不应该用 ptr+i,而是ptr+k,每次比较应该是与当前最小值比较,而不是跟 ptr+i比较。
    (3)最后输出的时候,需要把ptr重新赋值一下
    代码贴在下面,修改的部分在代码中有注释。
    运行结果:

    img

    代码修改如下:

    #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条)

报告相同问题?

问题事件

  • 系统已结题 1月28日
  • 已采纳回答 1月20日
  • 创建了问题 1月19日

悬赏问题

  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图