gpt4 book ai didi

c - 尝试使用字符串比较对链表进行排序时出错

转载 作者:行者123 更新时间:2023-11-30 19:34:26 25 4
gpt4 key购买 nike

我必须使用从文本文件中读取的一些数据构建一个链接列表,然后对其进行排序。我的结构:

struct Person {
int age;
char *name;
struct Person *next;
};

typedef struct Person LIST;

从文件中读取:

while (fgets(line, sizeof(line), fp)) {
LIST *node = (Person*)(malloc(sizeof(Person)));
node->name = strdup(line);
node->next = NULL;

if (head == NULL) {
current = head = node;
}
else {
current = current->next = node;
}
}
fclose(fp);

在此之后,我打印出看起来不错的链接列表。

理想情况下,我应该按年龄排序,但我没有成功将数据读入单独的变量中。所以我尝试通过比较字符串来对列表进行排序。它说“nullptr”,所以我在“if”语句中添加了两个条件 ((current->name[i]!=NULL) && (current->name[i+1] != NULL)),但是遇到同样的错误。

for (int i = 0; i < 5; i++)
{
if ( (current->name[i]!=NULL) && (current->name[i+1] != NULL) && ( (current->name[i]) > (current->name[i + 1]) ) )
{

char temp = NULL;
current->name[i] = temp;
current->name[i] = current->name[i + 1];
current->name[i + 1] = temp;

}
}

最佳答案

您从未将年龄读入 Age 变量,因此无法按年龄排序。如果要按名称排序,则需要使用 strcmp(char *a, char *b) 函数,该函数根据 a < b, a = 是否返回 -1、0 和 1 = b 或 a > b,所以你的条件应该变成:

if ((current != NULL) && (current->next != NULL) && strcmp(current->name, current->next.name) > 0)

这样您就可以比较当前节点和下一个节点的实际名称,而不是比较同名的字母。

关于c - 尝试使用字符串比较对链表进行排序时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43921801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com