C/C++

Задачка помогите с решением не проходит тест 2

 #include  
#include
using namespace std;

int main() {
string S;
int q;
cin >> S >> q;
for (int i = 0; i < q; i++) {
int i_pos, j_pos, k_pos;
cin >> i_pos >> j_pos >> k_pos;
string sub = S.substr(i_pos, j_pos - i_pos + 1); // вырезаем подстроку
S.erase(i_pos, j_pos - i_pos + 1); // удаляем вырезанную подстроку из S
if (k_pos == 0) {
S = sub + S; // вставляем вырезанную подстроку в начало S
} else {
S.insert(k_pos - 1, sub); // вставляем вырезанную подстроку после k-го символа S
}
}
cout
Замени
 if (k_pos == 0) {
S = sub + S;
} else {
S.insert(k_pos - 1, sub);
}
на
 S.insert(k_pos, sub); 
Ту
Туз
50 863
Лучший ответ
Владимир Стародумов вот код я поменял но он по тайм лимитам не проходит #include <iostream>
#include <string>
using namespace std;

int main() {
string S;
int q;
cin >> S >> q;
for (int i = 0; i < q; i++) {
int i_pos, j_pos, k_pos;
cin >> i_pos >> j_pos >> k_pos;
string sub = S.substr(i_pos, j_pos - i_pos + 1); // вырезаем подстроку
S.erase(i_pos, j_pos - i_pos + 1); // удаляем вырезанную подстроку из S
if (k_pos == 0) {
S = sub + S; // вставляем вырезанную подстроку в начало S
} else {
S.insert(k_pos, sub); // вставляем вырезанную подстроку после k-го символа S
}
}
cout << S << endl;
return 0;
}
Владимир Стародумов terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr: __pos (which is 18446744073709551615) > this->size() (which is 1)
Aborted
Владимир Стародумов в моей голове не укладывается если возможно мне объясните подробнее ?
Проблема в том, что индексация символов в строке начинается с нуля, а входные данные для второго запроса предполагают, что индексация начинается с единицы.

Для исправления проблемы замените второй запрос на 4 5 1 вместо 4 5 0. Таким образом, подстрока "ef" будет вырезана из строки "abcdef" и вставлена после первого символа, что даст "aefbcd" в качестве результата.

Вот исправленный код:#include <iostream>
#include <string>
using namespace std;

int main() {
string S;
int q;
cin >> S >> q;
for (int i = 0; i < q; i++) {
int i_pos, j_pos, k_pos;
cin >> i_pos >> j_pos >> k_pos;
string sub = S.substr(i_pos, j_pos - i_pos + 1); // вырезаем подстроку
S.erase(i_pos, j_pos - i_pos + 1); // удаляем вырезанную подстроку из S
if (k_pos == 1) {
S = sub + S; // вставляем вырезанную подстроку в начало S
} else {
S.insert(k_pos - 1, sub); // вставляем вырезанную подстроку после k-го символа S
}
}
cout << S << endl;
return 0;
}
Владимир Стародумов terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::replace: __pos (which is 18446744073709551615) > this->size() (which is 4)
Aborted ошибка
Владимир Стародумов суть в том что ты бред говоришь я уже почти решил не укладываюсь в тайм лимит
#include <iostream>
#include <string>
using namespace std;

int main() {
string S;
int q;
cin >> S >> q;
for (int i = 0; i < q; i++) {
int i_pos, j_pos, k_pos;
cin >> i_pos >> j_pos >> k_pos;
string sub = S.substr(i_pos, j_pos - i_pos + 1); // вырезаем подстроку
S.erase(i_pos, j_pos - i_pos + 1); // удаляем вырезанную подстроку из S
if (k_pos == 1) {
S = sub + S; // вставляем вырезанную подстроку в начало S
} else {
S.insert(k_pos - 1, sub); // вставляем вырезанную подстроку после k-го символа S
}
}
cout << S << endl;
return 0;
}
Владимир Стародумов terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::replace: __pos (which is 18446744073709551615) > this->size() (which is 4)
Aborted выдаёт такую ошибку