题目
题目详解
读完题意这题基本就出来了,你就依着题目的意思设计一个类,实现这个功能即可。这题偏业务代码,所以只需要选好工具选型即可。
这里主要就是撤销功能的实现可能对某些没学过数据结构的小白而言有点难实现。
由于撤销功能支持多次撤销,所以直接用栈来保存每次改变后的文字结果。每次撤销操作只需要出栈即可。具体到C++可以用vector也可用stack都行。。
注意一个坑:多组输入!
解题代码
#include<bits/stdc++.h>
using namespace std;
struct textNote{
string text_cur;
vector<string>pre_text;
void append(string& src){
pre_text.push_back(text_cur);
text_cur.append(src);
}
void del(int k){
pre_text.push_back(text_cur);
text_cur.erase(text_cur.end()-k,text_cur.end());
}
void print(int pos){
cout<<text_cur[pos-1]<<'\n';
}
void undo(){
text_cur = pre_text.back();
pre_text.pop_back();
}
void clear(){
pre_text.clear();
text_cur.clear();
}
};
int main() {
ios::sync_with_stdio(false);
int n;
textNote content;
while (cin >> n) {
while (n--){
int p;cin>>p;
int pos;
string src;
switch (p) {
case 1:
cin>>src;
content.append(src);
break;
case 2:
cin>>pos;
content.del(pos);
break;
case 3:
cin>>pos;
content.print(pos);
break;
case 4:
content.undo();
break;
}
}
content.clear();
}
return 0;
}