【发布时间】:2022-01-08 16:45:19
【问题描述】:
我似乎找不到我的逻辑有什么问题,strstr 没有达到我的预期
这是一个在二进制字符串中查找素数的问题,我在该字符串中找到10 或11,结果不是我所期望的。
对不起,如果我犯了一个可怕的愚蠢错误,我是菜鸟。
#include <stdio.h>
#include <string.h>
int main(void)
{
int t;
scanf("%d", &t);
while (t--)
{
char str[100000];
scanf("%s", str);
char ten[] = "10";
char eleven[] = "11";
int flag = 0;
if (strstr(str, ten) == NULL)
{
flag = 1;
}
else if (strstr(str,eleven) == NULL)
{
flag = 1;
}
if (flag == 1)
{
printf("NO\n");
}
else if (flag == 0)
{
printf("YES\n");
}
}
return 0;
}
输入提供是
3 //test cases
1 //strings
111
101101
输出获取
NO
NO
YES
预期输出
NO
YES
YES
【问题讨论】:
-
您提供什么输入?你期待什么输出?你得到什么输出?
-
等待 @DavidSchwartz 让我将其添加到问题中。
-
@DavidSchwartz 完成。
-
我很困惑。为什么您期望“111”给出“是”? “111”不包含“10”。所以第一次调用
strstr将返回NULL导致您将flag设置为1。如果flag设置为1,您的代码将输出NO。 (我不知道你在这行推理中哪里出错了,因为我不知道你的任何代码行应该做什么,因为它没有 cmets。我只能看到它做了什么,它显然是设计为为“111”输出“NO”。) -
@DavidSchwartz 我认为我做错了什么,但让我解释一下我想要做什么以及我想做什么。
111不包含10但之后还有另一个 else if 语句来检查111是否包含11但这有什么问题是它只会检查10并跳过 elseif。
标签: c