c - 为什么我的程序返回 true,因为结果应该是 false?
问题描述
我在 C 中实现 C“strstr”函数。这个函数在参数中接受 2 个字符串,并判断第一个字符串是否包含第二个字符串。然而,虽然预期结果为假,但它返回真。请给我一个解释好吗?
这是代码:
#include <stdio.h>
#include <string.h>
int searchStr(char *ch1, char *ch2);
int searchStr(char *ch1, char *ch2)
{
int i = 0;
int j = 0;
while (i < strlen(ch1) - 1)
{
while (j < strlen(ch2) - 1)
{
if(i == strlen(ch1) - 1)
{
return 0;
}
else
{
if (ch1[i] == ch2[j])
{
j++;
i++;
}
else
{
if (j > 0)
{
j = 0;
}
else
{
i++;
}
}
}
}
return 1;
}
}
int main()
{
printf("%d", searchStr("science", "sh"));
}
问候
优酷
解决方案
这是因为函数定义没有意义。:)
对于这个while循环
while (i < strlen(ch1) - 1)
{
内部 while 循环中的 if 语句
if(i == strlen(ch1) - 1)
strlen( ch2 )
当等于 2时,总是评估为逻辑假。
因此这个返回语句
return 0;
在这种情况下永远无法控制。
也就是说,内部 while 循环将只有一次迭代,并且当循环获得控制权时,由于外部 while 循环的条件,它i
会小于。strlen(ch1) - 1
推荐阅读
- python - 根据条件从列表中删除元素
- jquery - 没有在分页上被取消选择 - 数据表
- android - 无论如何在这里访问java代码中的gradle ext属性吗?
- node.js - npm open 在服务器中部署时不起作用?
- html - 如何在导航栏中垂直对齐按钮?
- javascript - 单击按钮时的 jQuery 动画表单
- python - DJANGO HEROKU:django.db.migrations.exceptions.InconsistentMigrationHistory:
- java - Dynamodb 本地连接被 Java 拒绝
- azure - 如何在通过 ARM 模板创建部署时从系统变量中读取输入
- makefile - Makefile 动态变量作为先决条件