gpt4 book ai didi

c++ - 关于for循环的终止条件

转载 作者:行者123 更新时间:2023-11-30 02:32:42 25 4
gpt4 key购买 nike

为什么我不能使用它?

for(int i=0; i<haystack.length()-needle.length()+1; i++)

我在 haystack="abb"needle="abaaa"时出错。

如果我使用它没有错误:

int diff=haystack.length()-needle.length()+1;
for(int i=0; i<diff; i++)

这是函数:

int strStr(string haystack, string needle){
if(needle.length()==0)
return 0;
if(haystack.length()==0)// || haystack.length() < needle.length())
return -1;

int diff=haystack.length()-needle.length()+1;
for(int i=0; i<(haystack.length()-needle.length()+1); i++){
//for(int i=0; i<diff; i++){
// printf("%d %d\n",haystack.length(),needle.length());
for(int j=0; j<needle.length(); j++){
if(haystack.at(i+j)!=needle.at(j))
break;

if(j==needle.length()-1)
return i;
}
}

return -1;
}

最佳答案

由于您将算术应用于无符号 length() 值的方式,您会遇到问题。变化:

for(int i=0; i<haystack.length()-needle.length()+1; i++)

到:

for(size_t i=0; i+needle.length()<=haystack.length(); i++)

这使比较的左侧和右侧都保持正值,避免了原始示例中的负下溢。

关于c++ - 关于for循环的终止条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36106487/

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