爱编程的小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日

悬赏问题

  • ¥30 电脑误删了手机的照片怎么恢复?
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办
  • ¥15 有人懂怎么做大模型的客服系统吗?卡住了卡住了
  • ¥20 firefly-rk3399上启动卡住了