#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
C/C++
Задачка помогите с решением не проходит тест 2
Замени
if (k_pos == 0) {
S = sub + S;
} else {
S.insert(k_pos - 1, sub);
}
на S.insert(k_pos, sub);
Проблема в том, что индексация символов в строке начинается с нуля, а входные данные для второго запроса предполагают, что индексация начинается с единицы.
Для исправления проблемы замените второй запрос на 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;
}
Для исправления проблемы замените второй запрос на 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 ошибка
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;
}
#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 выдаёт такую ошибку
what(): basic_string::replace: __pos (which is 18446744073709551615) > this->size() (which is 4)
Aborted выдаёт такую ошибку
Похожие вопросы
- С++ массивы. Программа не проходит тест
- Помогите с решением задачи на языке СИ
- Помогите с решением задачи в С++.
- Динамические массивы структур. Помогите с решением.
- Помогите с решением задачи на С++
- Помогите с решением задачи С++
- Помогите с решение задания в С++
- Помогите с задачкой на Си
- Помогите задачку зарешать пж
- Помогите плиз с задачкой.
#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;
}
what(): basic_string::substr: __pos (which is 18446744073709551615) > this->size() (which is 1)
Aborted