초기에 편집기에 입력되어 있는 문자열이 주어지고, 그 이후 입력한 명령어가 차례로 주어졌을 때, 모든 명령어를 수행하고 난 후 편집기에 입력되어 있는 문자열을 구하는 프로그램을 작성하시오. 단, 명령어가 수행되기 전에 커서는 문장의 맨 뒤에 위치하고 있다고 한다.
자료 구조
스택
연결 리스트
우선 string s
로 입력 받고 각 문자들을 list
에 push_back()
해주었다.
그 후 반복자(iterator
)를 이용하여, 각 연산들은 반복자를 통해 해결하였다.
삭제는 반복자가 가리키는 곳의 왼쪽 값을 삭제하였고,
삽입은 삽입 후 반복자를 1
만큼 더해주어 오른쪽으로 옮겨주었다.
마지막에는 리스트의 모든 문자를 출력하였다.
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <list>
using namespace std;
int main()
{
list<char> l;
string s;
int m;
char in1, in2;
cin >> s;
int size = s.length();
for (int i = 0; i < size; i++)
l.push_back(s[i]);
auto it = l.end();
cin >> m;
while (m--) {
cin >> in1;
if (in1 == 'P') {
cin >> in2;
it = l.insert(it, in2);
it++;
}
else if (in1 == 'L') {
if (it != l.begin()) it--;
}
else if (in1 == 'D') {
if (it != l.end()) it++;
}
else if (in1 == 'B') {
if (it != l.begin()) {
it--;
it = l.erase(it);
}
}
}
for (auto& x : l)
cout << x;
return 0;
}