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日

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?