@XRFD

Как исправить код?

подскажите как исправить код:
при вводе
abcdef
2
0 1 1
4 5 0
должен быть вывод:
efcabd а он выводит efabcd подскажите как исправить код

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main() {
    string s;
    int q;
    cin >> s >> q;

    vector<int> l(q), r(q), k(q);
    for (int i = 0; i < q; ++i) {
        cin >> l[i] >> r[i] >> k[i];
    }

    for (int i = q - 1; i >= 0; --i) {
        string t = s.substr(l[i], r[i] - l[i] + 1);
        s.erase(l[i], r[i] - l[i] + 1);
        if (k[i] == 0) {
            s = t + s;
        } else {
            s.insert(k[i] - 1, t);
        }
    }

    cout << s << endl;

    return 0;
}
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Похоже проблема в непонимании параметров string::insert. Там передается индекс, в который и вставляется строка. Т.е. новые данные будут по этому индексу. Фактически, они вставляются перед символом на этой позиции.

Оно уже делает ровно то, что вам надо, не нужно делать там k[i]-1 и разбирать отдельно случай k[i]==0.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
OrlovEvgenii
@OrlovEvgenii
golang developer / DevOps
Проблема в том, что векторы l, r и k индексируются с 0, а не с 1.
Замените индексацию в векторах на индексацию с 0, а в вычислении индексов подстроки используй l[i] - 1 вместо l[i], а также k[i] - 1 вместо k[i] при вызове insert().

Например так
#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() {
    string s;
    int q;
    cin >> s >> q;

    vector<int> l(q), r(q), k(q);
    for (int i = 0; i < q; ++i) {
        cin >> l[i] >> r[i] >> k[i];
    }

    for (int i = q - 1; i >= 0; --i) {
        string t = s.substr(l[i] - 1, r[i] - l[i] + 1);
        s.erase(l[i] - 1, r[i] - l[i] + 1);
        if (k[i] == 0) {
            s = t + s;
        } else {
            s.insert(k[i] - 1, t);
        }
    }

    cout << s << endl;

    return 0;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы