gpt4 book ai didi

c - 在结构列表中搜索字符串

转载 作者:太空宇宙 更新时间:2023-11-04 04:26:09 24 4
gpt4 key购买 nike

我制作了一个结构列表和两个字符串,现在我想要搜索并打印结构,该结构将搜索字符串作为第一个字符串中的子字符串。 我的代码:

# include <stdio.h>
# include <stdlib.h>
#include <string.h>

struct test_struct
{
char * first;
char * second;
struct test_struct *next;
};

struct test_struct *head = NULL;
struct test_struct *curr = NULL;

struct test_struct *create_list(char *first, char *second)
{
printf("First structure %s: %s\n", first, second);
struct test_struct *ptr = (struct test_struct*)malloc(sizeof(struct test_struct));
if(NULL == ptr)
{
printf("\n Node creation failed \n");
return NULL;
}
ptr->first = first;
ptr->second = second;
ptr->next = NULL;

head = curr = ptr;
return ptr;

}

struct test_struct* add_to_list(char *first, char *second)
{
if(NULL == head)
{
return (create_list(first, second));
}

printf("\n Added to list %s: %s\n", first, second);

struct test_struct *ptr = (struct test_struct*)malloc(sizeof(struct test_struct));
if(NULL == ptr)
{
printf("\n Node creation failed \n");
return NULL;
}
ptr->first = first;
ptr->second = second;
ptr->next = NULL;

curr->next = ptr;
curr = ptr;

return ptr;
}

void print_list(void)
{
struct test_struct *ptr = head;

printf("\n -------Printing list Start------- \n");
while(ptr != NULL)
{
printf("Položka seznamu %s: %s\n", ptr->first, ptr->second);
ptr = ptr->next;
}
printf("\n -------Printing list End------- \n");

return;
}

int search_in_list(char *search, struct test_struct **prev)
{
struct test_struct *ptr = head;
struct test_struct *tmp = NULL;
int found = 0;
char *p;

printf("\n Searching the list for value [%s] \n",search);

while(ptr != NULL)
{
p = strstr(ptr->first, search);
if(p)
{
found = 1;
printf("Member of list %s: %s\n", ptr->first, ptr->second);
}
else
{
tmp = ptr;
ptr = ptr->next;
}
}

return found;
}

int main()
{

char first[] = "54545";
char second[] = "Big Boss";

char first2[] = "78945";
char second2[] = "Small Boss";

char first3[] = "782355";
char second3[] = "Medium Boss";

char search[] = "45";

add_to_list(first, second);
add_to_list(first2,second2);
add_to_list(first3, second3);
print_list();

search_in_list(search, head);

return 1;
}

但是这个代码有一些错误我想打印54545:大老板78945 : 小老板

但我的代码打印无休止地重复第一行。我哪里有错误?

感谢@Matthias 我将搜索功能编辑为

int search_in_list(char *search, struct test_struct **prev)
{
struct test_struct *ptr = head;
struct test_struct *tmp = NULL;
int found = 0;
char *p;

printf("\n Searching the list for value [%s] \n",search);

while(ptr != NULL)
{
p = strstr(ptr->first, search);
if(p)
{
found = 1;
printf("Member of list %s: %s\n", ptr->first, ptr->second);

}
tmp = ptr;
ptr = ptr->next;

}

return found;
}

现在它似乎按照我的预期打印成员

最佳答案

如果可以找到子字符串,则 search_in_list() 中的 while 循环是一个无限循环,因为在这种情况下“ptr”永远不会为 NULL。您可以省略“found”变量,仅在 printf() 之后“return 1”和函数末尾的“return 0”。 ——马蒂亚斯

感谢@Matthias 我将搜索功能编辑为

int search_in_list(char *search, struct test_struct **prev)
{
struct test_struct *ptr = head;
struct test_struct *tmp = NULL;
int found = 0;
char *p;

printf("\n Searching the list for value [%s] \n",search);

while(ptr != NULL)
{
p = strstr(ptr->first, search);
if(p)
{
found = 1;
printf("Member of list %s: %s\n", ptr->first, ptr->second);

}
tmp = ptr;
ptr = ptr->next;

}

return found;
}

现在它似乎按照我的预期打印成员 – mardon

关于c - 在结构列表中搜索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41199286/

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