1 条题解

  • 0
    @ 2014-3-5 3:51:46

    【深基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;
    }
    
    • 1