我正在尝试对输入的城市名称进行排序。下面的代码对我来说似乎是正确的,但是虽然它编译成功,但它并没有像我预期的那样工作。
我没有理解指针吗?如果以下情况属实,请让我更正:
names
类型是 char **names[0]
类型是字符 *- 如果我想在检查字符串是否更大之后交换字符串
strcmp()
,我必须更改里面的值names[i]
,names[j]
因为这些值中的值是指向实际城市名称的指针。当它们互换时,它们指向彼此的 char 数组,我就完成了。
如果我的第三个想法是真的,我必须将参数传递给交换函数,char *
因为交换函数将names[i]
和names[j]
作为参数,并且这些类型是 char *。
在编写下面的代码时,想法就像上面一样。但似乎我的逻辑失败了,因为代码没有按预期工作。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int i,j;
char *temp;
void swap(char *, char *);
int main(void){
char *names[4];
//gets city names
puts("Enter 4 city names:");
for (i = 0; i < 4; i++)
{
names[i]=malloc(100);
fgets(names[i],99,stdin);
}
//bubble sort names array and swap if necessary
for (i = 0; i < 3; i++)
{
for (j = i+1; j<4 ; j++)
{
if (strcmp (names[i],names[j]) >0 )
{
swap(names[i], names[j]);
}
}
}
puts("Printing sorted array");
for (i = 0; i < 4; i++)
{
printf("%s", names[i]);
}
getch();
}
void swap(char *first, char *second){
temp=first;
first=second;
second=temp;
}