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