首页 > 解决方案 > 为什么我的程序返回 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"));

} 

问候

优酷

标签: calgorithmbooleanc-stringsstrstr

解决方案


这是因为函数定义没有意义。:)

对于这个while循环

while (i < strlen(ch1) - 1)
{

内部 while 循环中的 if 语句

        if(i == strlen(ch1) - 1) 

strlen( ch2 )当等于 2时,总是评估为逻辑假。

因此这个返回语句

return 0;

在这种情况下永远无法控制。

也就是说,内部 while 循环将只有一次迭代,并且当循环获得控制权时,由于外部 while 循环的条件,它i会小于。strlen(ch1) - 1


推荐阅读