Вот исходный код:
#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;
}
Выдает ошибку vector subscript out of range: http://snap.ashampoo.com/biLxWrF4 Проблема в (PMassive[counter3] == RMassive[counter2]). Что мне сделать, чтобы ее исправить?
Потому что массивы в C++ индексируются не от 1 до длины, а от 0 до (длины − 1).
А вы начинаете итерацию с индекса P.length()
, который равен длине.
При работе с контейнером std::string P
вам разрешается обращаться к элементам с индексами в диапазоне [ 0, P.length() ]
. Основное содержимое строки будет располагаться по индексам от 0
до P.length() - 1
, а последний элемент - с индексом P.length()
- будет вести себя как нулевой терминатор, следующий сразу за основным содержимым строки.
Однако этот нулевой терминатор не считается собственной частью строки и в диапазон итераторов [ P.begin(), P.end() )
он не входит. Поэтому если вы решили скопировать содержимое строки в другой контейнер - вектор - через
vector<char> PMassive(P.begin(), P.end());
то в этом векторе P
вам уже не разрешается доступаться к элементу с индексом P.length()
. Такого элемента не существует. Разрешенные индексы для такого вектора лежат в диапазоне [ 0, P.length() - 1 ]
.
Вы же обращаетесь в этот вектор по индексу P.length()
, что и приводит к ошибке.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пишу код чтобы он искал введеное слово в файле и возвращал значение (false или true в зависимости от наличия слова), но программа всегда возвращает...