使用指针数组按字母顺序对字符串进行排序

时间:2019-03-11 08:07:08

标签: c

我希望使用交换功能按字母顺序对字符串进行排序。交换功能似乎无效。我是否也应该将整个字符串数组传递给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;
}

1 个答案:

答案 0 :(得分:4)

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

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

编辑:如下面的注释中所述:然后像swap(&name[i],&name[j]);

那样命名