회원가입
로그인
Toggle navigation
문제
문제
전체 문제
문제 출처
단계별로 풀어보기
알고리즘 분류
추가된 문제
문제 순위
문제
푼 사람이 한 명인 문제
아무도 못 푼 문제
최근 제출된 문제
최근 풀린 문제
랜덤
출처
ICPC
Olympiad
한국정보올림피아드
한국정보올림피아드시․도지역본선
전국 대학생 프로그래밍 대회 동아리 연합
대학교 대회
카카오 코드 페스티벌
Coder's High
ICPC
Regionals
World Finals
Korea Regional
Africa and the Middle East Regionals
Europe Regionals
Latin America Regionals
North America Regionals
South Pacific Regionals
문제집
대회
1
채점 현황
랭킹
게시판
그룹
더 보기
재채점 기록
블로그
강의
실험실
도움말
BOJ Stack
BOJ Book
전체
공지
자유
질문
오타/오역/요청
게시판 공지
홍보
업데이트
solved.ac
글쓰기
질문 도움말
자주묻는 질문
c++) 오류의 원인을 잘 모르겠습니다.
1406번 - 에디터
songunyoung
2년 전
0
리스트의 활용에서 잘 못 됐을까요?
#include <iostream> #include <list> using namespace std; int main() { list<char> name; string n; int d; char e,e1; list<char>::iterator iter=name.end()--; cin>>n>>d; for(int p=0;p<n.size();p++) { name.push_back(n[p]); } for(int p=0;p<d;p++) { cin>>e; if(e== 'L') { if(iter!=name.begin()) iter--; } else if(e=='R') { if(iter!=name.end()--) iter++; } else if(e=='B') { if(iter!=name.begin()) { iter=name.erase(iter); } } else if(e=='P') { cin>>e1; name.insert(iter,e1); //iter++; } } for(iter=name.begin();iter!=name.end();iter++) { cout << *iter; } return 0; }
dldyddlwl
2년 전
1
아래에 있습니다.
// ... 중략 list<char>::iterator iter=name.end()--; // 어차피 들어있는 게 없는 상태이니까 굳이 건드려도 의미가 없습니다! // list<char>::iterator iter = name.end(); for(int p=0;p<d;p++) { // ... 중략 else if(e=='R') // 오른쪽으로 움직이는 명령어는 R이 아니라 D입니다!!! { if(iter!=name.end()--) // a-- 와 --a의 차이는 아시죠? 여기서는 의미가 없습니다. iter++; // name.end()-- 이므로, iter와의 비교에서는 아무 영향도 주지 못합니다. } // 그리고 비교연산 후, name.end()가 --연산을 거친다고 하더라도, 복사된 값이므로, // 아무 의미가 없습니다. 따라서, 굳이 의미없는 식이므로, 안 쓰는 게 낫습니다. /* else if (e == 'D') { if (iter != name.end()) { // 그러므로 그냥 써주셔도 됩니다. iter++; } } */ else if(e=='B') // 지우는 것은 커서의 왼쪽을 지우는 것입니다!! { // 즉, 현재 가리키는 곳이 아니라 그 앞을 지워야 하므로, 한칸 앞으로 가셔야 합니다 if(iter!=name.begin()) { iter=name.erase(iter); } } /* else if (e == 'B') { if (iter != name.begin()) { iter--; // 한칸 앞으로 가서 지우기 iter = name.erase(iter); } } */
댓글을 작성하려면
로그인
해야 합니다.
songunyoung 2년 전
리스트의 활용에서 잘 못 됐을까요?