Simple Text Editor

  • + 0 comments

    C++20 solution:

    #include <cmath>
    #include <cstdio>
    #include <vector>
    #include <iostream>
    #include <sstream>
    #include <algorithm>
    #include <stack>
    using namespace std;
    
    
    int main() {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT */
        vector<string> operations;
        stack<pair<int, string>> undo;
        int numOfOps;
        cin >> numOfOps;
        cin.ignore();
        string str = "";
        for (int i = 0; i < numOfOps; ++i) {
            string op;
            getline(cin, op);
            int code;
            string arg;
            stringstream ss(op);
            ss >> code >> arg;
            switch (code) {
                case 1:
                    str += arg;
                    undo.push({1, arg});
                    break;
                case 2:
                    undo.push({2, str.substr(str.size() - stoi(arg))});
                    str.erase(str.size() - stoi(arg));
                    break;
                case 3:
                    cout << str[stoi(arg) - 1] << endl;
                    break;
                case 4:
                    auto [lastOp, lastItem] = undo.top();
                    switch (lastOp) {
                        case 1:
                            str.erase(str.size() - lastItem.size());
                            break;
                        case 2:
                            str += lastItem;
                            break;
                    }
                    undo.pop();
                    break;
            }
        }
        return 0;
    }