乖松鼠 2019-04-24 21:17 采纳率: 0%
浏览 211

找字串 运行错误 怎么解决?

找子串个数,提交oj平台总是说运行错误,可是自己编译没问题啊,qiu'jie

#include<iostream>
#include<algorithm>
#include<string>


using namespace std;
int main()
{
    int j = 0, cnt = 0;
    string s1, s2;
    getline(cin,s1);
    while (getline(cin,s2))
    {
        for (unsigned int i = 0; i < s2.length() - s1.length() + 1;)
        {
            if (s2[i] == s1[j])
            {
                unsigned int k, count = 0;
                for (k = 0; k < s1.length() && s2[i] == s1[j]; i++, k++, j++)
                {
                    count++;
                }
                if (count == s1.length())
                {
                    cnt++;
                }count = 0; j = 0;
            }
            else 
                i++;
        }
    }
    cout << cnt;
    return 0;
}
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-09 03:11
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    你提供的代码中有一个小问题。当你使用while循环遍历字符串s2时,你需要在每次迭代中更新变量ij的值。这样做的目的是找到子串的位置,并将其计数器更新为当前子串长度。

    你的代码没有正确地执行这个逻辑。为了修复这个问题,请修改代码如下:

    #include<iostream>
    #include<algorithm>
    #include<string>
    
    using namespace std;
    
    int main()
    {
        string s1, s2;
        cin >> s1;
        getline(cin, s2);
    
        int j = 0, cnt = 0;
        unsigned int i = 0;
    
        // 使用for循环来遍历字符串`s2`
        while (i <= s2.size() - s1.size())
        {
            bool found = true;
            // 检查每个字符是否与`s1`匹配
            for (char c : s1)
            {
                if (i >= s2.size() || s2[i] != c)
                {
                    found = false;
                    break;
                }
                i++; // 更新索引
            }
    
            if (found) // 如果找到了子串
            {
                unsigned int k, count = 0;
                for (k = 0; k < s1.length() && s2[i] == s1[j]; i++, k++, j++)
                {
                    count++;
                }
                if (count == s1.length()) // 如果子串与`s1`完全匹配
                {
                    cnt++; // 增加计数器
                }
                count = 0; // 重置计数器
                j = 0; // 重置索引
            }
            else
            {
                i++; // 更新索引
            }
        }
    
        cout << cnt;
        return 0;
    }
    

    现在这段代码应该可以正常工作了。你可以通过运行这段代码并提交到OJ平台上看看结果。

    评论

报告相同问题?