ERROR对抗 2021-07-08 01:27 采纳率: 100%
浏览 156
已结题

【C++ 从较长字符串str1找较短字符串str2出现的次数】

【问题】
不知道为什么我的代码中间出现的str2无法计算在内,求大神帮找代码问题:
【代码如下】

#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;
int main(){
    
    string str1 = "";
    string str2 = "";
    
    cout << "请输入第一个较长字符串:" << endl;
    getline(cin, str1);
    cout << "请输入第二个子字符串:" << endl;
    getline(cin, str2);
    //cout << str1 << endl;
    //cout << str2 << endl;
    
    int length1 = str1.length();
    int length2 = str2.length();
    //cout << length1 << " " << length2 << endl;
    
    int count = 0;  // 计数 
    // 遍历较长字符串 
    for(int i = 0; i < length1 - 1;i++){
        // 先找到首字符相同位置 
        if (str2[0] == str1[i]){
            // 应该先判断后续长度是否足够
            if ((i + length2 - 1) <= length1 - 1){
                // 注意切片取前不取后 
                if (str1.substr(i,i + length2) == str2){
                    count += 1;
                    // 修改下标,注意最后一段恰好相同的情况 
                    if ((i + length2 - 1) == length1 - 1){
                        i = length1 - 1;
                    }
                    else{
                        i = i + length2;
                    }
                }
            }
        }
    } 
    
    cout << "出现次数为:" << count << endl;
    return 0; 
} 

img

  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2021-07-08 06:30
    关注

    主要是你substr函数用错了,第二个参数表示要截取的长度,不是截取到的结束位置
    if (str1.substr(i,i + length2) == str2){
    改为:
    if (str1.substr(i,length2) == str2){
    就好了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月30日
  • 已采纳回答 9月22日

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c