使用指针数组按字母顺序排序

问题描述 投票:1回答:1

我希望使用交换函数按字母顺序对字符串进行排序。交换功能似乎不起作用。我应该将整个字符串数组传递给swap吗?

#include <stdio.h>
#include <string.h>
void swap (char *s, char *t);
void main()
{
    char *name[10] = {"Noida","Lucknow","Kanpur","Mohali","Chandigarh","Mumbai","Kerala","Chennai","Bangalore","Indore"};
    char *temp;
    printf("The names are :\n");
    for(int i = 0; i < 10; i++)
    {
        printf("%s\n",name[i]);
    }
    printf("\nSORTING ALPHABETICALLY - \n\n");
    for (int i = 0; i < 10; i++)
    {
        for (int j = i + 1; j < 10; j++)
        {
            if(strcmp(name[i],name[j])>0)
                swap(name[i],name[j]);
        }
    }
    for(int i = 0; i < 10; i++)
    {
        printf("%s\n",name[i]);
    }
}
void swap (char *s, char *t) //Not swapping
{
    char *temp;
              temp = s;
              s = t;
              t = temp;
}
c
1个回答
4
投票

你是通过副本传递指针。该函数对其自己的局部变量进行操作,这些变量是指向这些字符串的指针的副本,而不是指向main变量的指针。所以它可以改变字符串而不是那些变量(=那些指针的值)。这应该解决它:

void swap (char **s, char **t) 
{
    char *temp;
    temp = *s;
    *s = *t;
    *t = temp;
}

编辑:如下面的评论所述:然后称之为qazxsw poi

© www.soinside.com 2019 - 2024. All rights reserved.