gpt4 book ai didi

c - 如何迭代节点列表并比较字符串

转载 作者:行者123 更新时间:2023-11-30 18:33:15 25 4
gpt4 key购买 nike

我对 C 中链表的概念还很陌生。我花了很多时间想出一个逻辑来执行以下操作,但一切都是徒劳的。我正在尝试遍历链接列表。假设每个节点代表一个人,每个人(节点)有两个特征。例如:

struct person {
struct person *next;
char name[NAME_LENGTH];
char trait_01[TRAIT_LENGTH];
char trait_02[TRAIT_LENGTH];
}

Node 1: Sarah (trait 1: Soccer Trait 2: Designer)
Node 2: Carl (trait 1: Baseball Trait 2: None)
Node 3: Andrew (trait 1: Soccer Trait 2: Walking)
Node 4: John (trait 1: Cricket Trait 2: Designer)
Node 5: Cara (trait 1: Surfer Trait 2: Walking)
Node 6: Ben (trait 1: Racing Trait 2: Acting)
Node 7: Andy (trait 1: Walking Trait 2: Surfer)
Node 8: Jack (trait 1: Designer trait 2: Soccer )

**Output:**
Soccer
Designer
Baseball
Walking
Cricket
Surfer
Racing
Acting

输出没有重复任何特征,并且不包含“None”一词,并且应该按顺序排列,即先打印特征 1,然后打印特征 2。

有谁可以帮忙吗?

最佳答案

正如您在评论中提到的,逻辑不清楚,因为您的输出中没有任何证据表明trait1可以与trait2进行比较 为了识别重复的特征,承保代码只是从 trait1 中已出现的值中删除(而不是打印)重复的 trait1 值,并且与 相同特征2:



//AFTER CREATING THE LINKED-LIST

temp=head; //temp is a temporary node for traversal
int indicator1=0;
int indicator2=0;

while(temp)
{
temp1=head; //temp1 is a temporary node

if(temp==head) //all of the traits of head node is to printed with the "None" logic requirement of course
{
if(strcmp(temp->trait_01,"None")!=0)
printf("%s\n",temp->trait_01);

if(strcmp(temp->trait_02,"None")!=0)
printf("%s\n",temp->trait_02);
}
else //if trait is already present in earlier nodes then it is not printed and of course "None" logic is followed
{
while(temp1!=temp)
{
if((!strcmp(temp->trait_01,temp1->trait_01))&&(indicator1==0)&&(!strcmp(temp->trait_01,temp1->trait_02)))
{
indicator1=1;
}

if((!strcmp(temp->trait_02,temp1->trait_02))&&(inicator2==0)&&(!strcmp(temp->trait_02,temp1->trait_01)))
{
indicator2=1;
}
}
if((indicator1==0)&&(strcmp(temp->trait_01,"None")))
printf("%s\n",temp->trait_01);
if((indicator2==0)&&(strcmp(temp->trait_02,"None")))
printf("%s\n",temp->trait_01);

}
temp=temp->next;

indicator1=0;
indicator2=0;
}

解释:第一个 while 循环 while(temp) 遍历链表的每个节点(当 temp 时,违反了 while 条件是 NULL 即链表的末尾)。

第二个 while 循环 while(temp1!=temp) -> 代码尝试将 temp 节点的特征值与位于的节点的特征值进行匹配temp 之前的链表(head 节点和 temp 之间),temp1 表示位于 temp 之上/之后的节点code>head 节点和 temp 节点之前。

条件 !strcmp(str1, str2)v(当字符串相同时,strcmp 返回 0) 表示两个字符串是同样,if 条件将得到满足,并且 indicator 将设置为 1,表示特征值 temp节点(trait_01trait_02)相同作为某个先前节点 temp1 的特征值。当此指示器设置为 1 时,我们不会打印特征值。

希望这有帮助!

关于c - 如何迭代节点列表并比较字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58900881/

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