You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自行实现的ft_strstr函数自测正常但系统测评失败,求问题定位

ft_strstr函数问题排查

问题根因

你的代码核心问题是内层匹配循环中直接修改了外层遍历的下标i,匹配失败后没有将i回退到本次匹配起始位置的下一位,会跳过部分可能的匹配场景,导致出现错判。
举个简单的复现例子:

  • str = "aaab",to_find = "aab"
  • 第一轮匹配从i=0开始,匹配到i=2、k=2时匹配失败,此时i已经被累加为2,外层循环又执行i++变成3,直接跳过了本应正确的匹配起始位置i=1,就会出现不符合预期的返回结果。
    你测评返回的错误就是因为类似的场景:本不存在匹配(应返回-1),你的代码错误识别到了不存在的匹配,返回了偏移量7、87,和标准库结果不一致。

修复方案

推荐新增临时变量存储匹配过程的偏移,避免直接修改外层遍历的下标i,逻辑更清晰也不容易出错:

char    *ft_strstr(char *str, char *to_find)
{
    int i;
    int j;
    int k;

    i = 0;
    if (*to_find == 0)
        return (str);
    while (str[i] != '\0')
    {
        j = i;
        k = 0;
        while (str[j] && to_find[k] && str[j] == to_find[k])
        {
            j++;
            k++;
            if (to_find[k] == '\0')
                return (&str[i]);
        }
        i++;
    }
    return (0);
}

如果你要保留原有写法,只需要在内层匹配失败后回退i的值,删除原有多余的i++即可:

// 原有内层while循环结束后修改为
i = i - k + 1;
k = 0;

内容的提问来源于stack exchange,提问作者Toyama70

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 14:21:01