爱编程的小didi 2022-08-08 16:27 采纳率: 20%
浏览 27

for循环为什么能够循环haystack.length()次?

问题遇到的现象和发生背景

这个是在刷leetcode题中遇到的c++语法问题,在strStr函数的for循环中,i <= (haystack.length() - needle.length())应该一次循环都不执行才符合逻辑。
但却执行了haystack.length()次。请问内部是什么原因呢?

问题相关代码,请勿粘贴截图
#include<string>
#include<iostream>

using namespace std;

int strStr(string haystack, string needle) {
    if(needle.length() == 0) return 0;
    int n = haystack.length() - needle.length();
    // cout << n << endl;
    for(int i = 0; i <= (haystack.length() - needle.length()); i++)
    {
        cout << i << endl;
        if(haystack.substr(i, needle.length()) == needle)
            return i;
    }
    return -1;
}

int  main()
{
    string a = "aaaaa";
    string b = "aaaaaaaaaaa";
    strStr(a, b);
    return 0;
}

运行结果及报错内容
0
1
2
3
4
5
6
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::substr: __pos (which is 6) > this->size() (which is 5)

  • 写回答

3条回答 默认 最新

  • 快乐鹦鹉 2022-08-08 16:36
    关注

    因为length()函数返回的是无符号整型,两个无符号整型相减,默认结果还是无符号整型,所以i<=两个无符号整型相减的结果,是成立的。
    两个字符串长度相减后是一个很大的整数,所以当循环到超过第一个字符串长度时,substr函数会崩溃

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 8月8日

悬赏问题

  • ¥15 有偿求指导实证代码。cfps清洗合并后,无论是构建平衡面板还是非平衡面板,都是只剩几百个样本量。求指导一下哪里出问题了,不要潦草回复
  • ¥15 mutlinichenet
  • ¥50 Qt5.14.2怎样使用qlistwidget存储指针类数据并更新?
  • ¥15 STM32多路复用器ADC采样
  • ¥20 Linux(ubuntu)操作相关问题
  • ¥15 python深度学习代码求跑
  • ¥100 对接美团闪购医药接口相关问题
  • ¥15 嵌入式软件电子烟开发
  • ¥15 职场 Excel 查重问题
  • ¥15 求怎么用idea2021.3.2创建web项目并配置tomcat