gpt4 book ai didi

C: 帮助自定义 strpos() 函数

转载 作者:太空宇宙 更新时间:2023-11-04 06:43:39 24 4
gpt4 key购买 nike

我有以下功能:

int strpos(const char *needle, const char *haystack)
{
int neLen, haLen, foundPos, nePos, i;
char temp;

neLen = strlen(needle);
haLen = strlen(haystack);

if(haLen < neLen)
return -1;

nePos = 0;
foundPos = -1;
i = 0;

while((temp = *haystack++) != '\0'
&& (i < (haLen-neLen+1) || foundPos > -1)
&& nePos < neLen)
{
if(temp == *needle+nePos)
{
if(nePos == 0)
foundPos = i;
nePos++;
}
else
{
nePos = 0;
foundPos = -1;
}

i++;
}

return foundPos;
}

当我搜索单个字符时,它可以正常工作:

printf("Strpos: %d\n", strpos("a", "laoo")); // Result: "Strpos: 1"

但它不适用于较长的字符串:

printf("Strpos: %d\n", strpos("ao", "laoo")); // Result: "Strpos: -1"

问题是什么?

额外的问题: while 循环是否正确地分成了多行?可接受的方法是什么?

编辑:strlen() 自然是一个返回字符串长度的自定义函数。这工作正常。

最佳答案

每次循环时,您都会从大海捞针中获得下一个角色。因此,如果在您完成 needle 与从位置 0 开始的 haystack 子串的比较时 needle 有两个字符,则 haystack 指针指向位置 2(对于两个字符的 needle)。

这意味着您跳过了 needle 与 haystack 从位置 1 开始的子串的比较。

关于C: 帮助自定义 strpos() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4334332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com