我希望使用交换功能按字母顺序对字符串进行排序。交换功能似乎无效。我是否也应该将整个字符串数组传递给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;
}
答案 0 :(得分:4)
您正在通过副本传递指针。该函数对自己的局部变量进行操作,这些局部变量是指向这些字符串的指针的副本,而不是指向main
变量的指针的副本。因此它可以更改字符串,但不能更改那些变量(=那些指针的值)。这应该解决它:
void swap (char **s, char **t)
{
char *temp;
temp = *s;
*s = *t;
*t = temp;
}
编辑:如下面的注释中所述:然后像swap(&name[i],&name[j]);