这是源代码:
#include "stdafx.h"
#include <string>
#include <Windows.h>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::string P, R;
cin >> P >> R;
vector<char> PMassive(P.begin(), P.end());
vector<char> RMassive(R.begin(), R.end());
int counter = 0;
int counter2 = R.length();
metka:
int counter3 = P.length();
if (counter2 == 0) goto end;
if (PMassive[counter3] == RMassive[counter2]) {
counter2--;
counter3--;
}
else if (counter2 != 0) { counter++; goto metka; }
end:
std::cout << counter;
Sleep(5000);
return 0;
}
引发向量下标超出范围错误:http ://snap.ashampoo.com/biLxWrF4 问题是(PMassive[counter3] == RMassive[counter2])。我能做些什么来修复它?
因为 C++ 中的数组的索引不是从 1 到 length,而是从 0 到 (length - 1)。
然后你开始迭代 index
P.length()
,它等于长度。使用容器
std::string P
时,您可以访问索引在范围内的元素[ 0, P.length() ]
。字符串的主要内容将从0
to 开始索引P.length() - 1
,最后一个元素(位于索引处P.length()
)的行为类似于紧跟字符串主要内容的空终止符。但是,此空终止符不被视为字符串本身的
[ P.begin(), P.end() )
一部分,也不属于迭代器范围。因此,如果您决定将字符串的内容复制到另一个容器 - 一个向量 - 通过然后在该向量中,
P
您不再被允许访问 index 处的元素P.length()
。没有这样的元素。这种向量的允许索引在范围内[ 0, P.length() - 1 ]
。您正在通过 index 访问此向量
P.length()
,这会导致错误。