关于for循环的终止条件

时间:2016-03-19 20:00:16

标签: c++ for-loop

为什么我不能使用它?

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

当haystack =&#34; abb&#34;针=&#34; abaaa&#34;

如果我使用,则没有错误:

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;
    }

1 个答案:

答案 0 :(得分:3)

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

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

为:

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

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