You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++查找给定字符串所有子串程序无输出问题求助

子串查找程序的问题排查与修复

代码中的核心问题

  1. 类型不匹配:string::find()返回size_t(无符号整数类型),你用int类型的found接收结果。当找不到子串时,find()返回string::npos(值为无符号整数最大值),赋值给int会变为负数,彻底打乱循环逻辑。
  2. 循环条件错误:你用found < str1.size()作为循环条件,当found因类型转换变为负数时,这个条件永远成立,会进入死循环;同时这个条件无法正确判断是否找到子串。
  3. 重复调用find()冗余且错误:你在cout中再次调用str1.find(str, found),这不仅重复执行查找操作,还会在found无效时(如npos转成的负数)从字符串起始位置重新查找,输出错误结果。
  4. 变量命名易混淆:str和str1的命名无法区分原字符串和子串,容易搞反查找逻辑。

修正后的代码

#include <iostream>
#include <string>
  
using namespace std;
  
int main()
{
    string subStr; // 要查找的子串
    string mainStr; // 原字符串

    cin >> subStr >> mainStr;
    size_t found = mainStr.find(subStr);
    while (found != string::npos) {
        cout << found << endl;
        // 从上一次找到的位置的下一位开始继续查找
        found = mainStr.find(subStr, found + 1);
    }
}

修正说明

  • 将found改为size_t类型,完全匹配find()的返回值,避免类型转换错误。
  • 循环条件改为found != string::npos,找不到子串时直接退出循环,逻辑清晰。
  • 直接输出找到的位置found,去掉冗余的find()调用,保证输出结果准确。
  • 重命名变量为subStr和mainStr,明确各自的作用,避免逻辑混淆。

当输入ab和aabb时,修正后的代码会输出1,对应"aabb"中ab子串的起始索引位置。

内容的提问来源于stack exchange,提问作者Michał Matusik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:20:32