使用C语言中的strstr函数搜索文本

3

我正在制作一个搜索程序,但它没有为我的输入输出句子。最后什么也没显示出来,只有第一行的“搜索:”。

#include <stdio.h>
#include <string.h>
char tracks[][80] = {
"I left my heart in Harvard Med School",
"Newark, Newark - a wonderful town",
"Dancing with a Dork",
"From here to maternity",
"The girl from Iwo Jima",
};

void find_track(char search_for[])
{
int i;
for (i = 0; i < 5; i++) {
if (strstr(tracks[i], search_for))
printf("Track %i: '%s'\n", i, tracks[i]);
}
}

int main()
{
char search_for[80];
printf("Search for: ");
fgets(search_for, 80, stdin);
find_track(search_for);
return 0;
}

使用 Visual Studio 2010 和 C 语言

2个回答

3
fgets(search_for, 80, stdin); 

如果您在按回车键之后输入heart

fgets()会将换行符读入search_for

    Now search_for=="heart\n";

删除search_for结尾处的\n

   if(search_for[strlen(search_for)-1]=='\n')
      search_for[strlen(search_for)-1]='\0';

   find_track(search_for);

另一个问题:如何使用 tolower 函数将输入字符转换为小写? - Chozo Qhai
tolower()函数将一个大写字母转换成小写字母,并返回该字母的小写形式。如果不可能进行此类转换,则返回原始字母c。请参见 tolower()示例这里 - Gangadhar

0

最简单的解决方案是替换:

fgets(search_for, 80, stdin); 

使用

fscanf(stdin, "%s", search_for);

使用这种方法时,但要小心不要在搜索框中输入超过79个字符。

我不建议用fscanf替换fgets,原因就在于缓冲区溢出问题。在生产代码中,这可能会成为潜在的安全问题。 - Martin R
此外,这些函数的行为也不同。fscanf 仅读取到任何空白字符。 - Martin R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接