cpp算法题求解,感觉逻辑上感觉没什么问题,然而就是报错,原题和代码附在下方。

cpp,撸一道题,感觉逻辑上没什么问题呀,然而就是报错,原题和代码附在下方。(一开始以为是cin不能接收空格的原因,换成getline还是没改变)

img

img

#include<iostream>
#include<string>
#include<sstream>

using std::cin;
using std::cout;
using std::string;
using std::getline;
class Solution
{
    string *views;
    int agree;
    int n;
public:
    Solution()
    {
        n = 0;
        agree = 0;
        cin >> n;
        views = new string[n];
        for (int i = 0; i <n; i++)
            getline(cin, views[i]);
    }
    void solution()
    {
        for (int i = 0; i < n; i++)
        {
            int times = 0;
            string s = views[i];
            for (int j = 0; j < 5; j+=2)

                if (s[j] == '1')
                    times++;
            if (times >= 2)
                agree++;
        }
    }
    int Agree()
    {
        return agree;
    }
    ~Solution()
    {
        delete[]views;
    }
};

int main(void)
{
    Solution s;
    s.solution();
    cout << s.Agree();
}

错误意思是子串超范围啦,就是越界

string s = views[i];
            for (int j = 0; j < 5; j+=2)
 
                if (s[j] == '1')

这代码有毛病啊,j<5不行,改为j<s.length(),否则如果字符串长度不足5,就是越界访问了