[英]Using strstr to determine if a given string contains a string with spaces [C]
我正在研究一个使用strstr()
函数的示例。
如果输入“ Pamela Sue Smith”,为什么程序输出“” Pamela“是子字符串!” 而不是““ Pamela Sue Smith”是子字符串!“。
#include <stdio.h>
#include <string.h>
void main(void)
{
char str[72];
char target[] = "Pamela Sue Smith";
printf("Enter your string: ");
scanf("%s", str);
if (strstr( target, str) != NULL )
printf(" %s is a sub-string!\n", str);
}
在scanf
的手册页中:
“ s”-匹配一系列非空格字符; 下一个指针必须是指向字符数组的指针,该指针必须足够长以容纳输入序列和终止的空字节('\\ 0'),该字符会自动添加。 输入字符串停在空白处或最大字段宽度处,以先到者为准。
因此,“苏·史密斯”这一部分从来没有达到str
。 您可以使用fgets
来一次读取整行:
if (fgets(str, sizeof str, stdin) == NULL) {
printf("End of file\n");
return;
}
请注意,在这种情况下, str
包含终止行尾字符。 你可以做
if (*str != '\0')
str[strlen(str) - 1] = '\0';
删除它。 (此外,正如其他人已经指出的那样,对strstr
的“干草堆”争论首先出现。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.