我需要创建一个接收子字符串作为参数的函数,并检查链表中的任何字符串是否包含该子字符串。
该函数创建一个新的链表,其中包含所有包含给定子字符串的字符串。
该功能如下所示:
lista *lista_pesquisa_substring(lista *lst, char *substring)
{
l_elemento *aux, *curr;
lista *lis2;
int i = 0, tamanho;
lis2 = lista_nova();
if(lst == NULL || substring == NULL){
return NULL;
}
for (aux = lst->inicio; aux != NULL; aux = aux->proximo)
{
curr = lista_elemento(lis2, i);
if (strstr(*aux->str, substring) != NULL)
{
lista_insere(lis2, aux->str, curr);
i++;
}
}
tamanho = lista_tamanho(lis2);
printf("Foram carregados %d jogos.\n", tamanho);
for(i = 0; i < tamanho; i++)
{
curr = lista_elemento(lis2, i);
printf("Pos %d -> %s\n", i, curr->str);
}
return lis2;
}
if语句未按预期工作。它仅在给定的子字符串与链接列表中的字符串完全相同时才有效。
例如,如果链接列表中的字符串是“Hello there”,并且给定的子字符串是“Hello there”,那么if语句将起作用。 但是如果子串是“那里”,则if不起作用。
编辑: 我还应该提到用作参数的子字符串是由用户使用fgets函数写的。
我尝试使用预先存在的字符串来测试它并且它可以工作。所以我很困惑为什么它不适用于用户输入的字符串。
答案 0 :(得分:0)
我还应该提到用作参数的子字符串是由用户使用fgets函数编写的。
所以我很困惑为什么它不适用于用户输入的字符串。
当您使用fgets()
函数从用户处获取输入时它不起作用的一个可能原因是,当用户提供输入并按ENTER
键时,fgets()
会将换行符视为一个有效的字符,并将其包含在用户给出的输入字符串中。因此,如果用户提供输入字符串"there"
并按Enter
键,fgets()
将从输入流中读取字符并将其存储在缓冲区中,如下所示:
+---------------------------+
| t | h | e | r | e | \n| \0|
+---------------------------+
^^
从输入缓冲区中删除尾随换行符,然后将其传递给查找链表中子串的函数:
inbuffer[strcspn(inbuffer, "\n")] = 0; //inbuffer is buffer which holds input string given by user