【深基6.例6】文字处理软件 · 教师题解

【深基6.例6】文字处理软件

解题思路

用 string 的追加、substr、insert、find 对应四类操作。修改操作输出新文档,查询操作输出首位置或 -1。

正确性说明

标准字符串操作分别实现题意定义的追加、保留区间、位置前插入和首次匹配查找;顺序执行使每次都基于最新文档。

易错点

下标从 0 开始;substr 第二参数是长度而非终点;npos 不能直接当普通下标输出。

复杂度

设最大文档长 L、操作串长 P,单次查找最坏 O(LP),修改 O(L+P),空间 O(L+P)。

参考代码(C++11)

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int q;
    string s;
    cin >> q >> s;
    while (q--) {
        int op;
        cin >> op;
        if (op == 1) {
            string t;
            cin >> t;
            s += t;
            cout << s << "\n";
        } else if (op == 2) {
            int a, b;
            cin >> a >> b;
            s = s.substr(a, b);
            cout << s << "\n";
        } else if (op == 3) {
            int a;
            string t;
            cin >> a >> t;
            s.insert(a, t);
            cout << s << "\n";
        } else {
            string t;
            cin >> t;
            size_t p = s.find(t);
            if (p == string::npos)
                cout << -1 << "\n";
            else
                cout << p << "\n";
        }
    }
    return 0;
}
返回题目