할 일 삭제하기
Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 21번째.
챌린지
쉬움목록에서 특정 작업을 삭제하는 삭제 기능을 구현하여 작업 목록 도구를 확장하세요. 이는 이전 레슨을 바탕으로 작업의 위치 번호를 사용하여 작업을 제거하는 기능을 추가하는 것입니다.
다음 입력이 제공됩니다:
- 처음에 추가할 작업의 수를 나타내는 정수
n - 그 다음 작업 설명을 나타내는
n개의 문자열 - 삭제할 작업 번호를 나타내는 정수
taskNumber(1부터 시작하는 인덱스)
프로그램은 다음을 수행해야 합니다:
- 이전 레슨과 동일한 설정으로 시작합니다 (
tasks라는 이름의 빈std::vector<std::string>및 환영 메시지) cin >> n으로 작업 수를 읽은 다음,getline()으로 작업 문자열을 읽기 전에 남은 줄바꿈 문자를 버리기 위해cin.ignore()를 호출합니다.push_back()을 사용하여 각 작업 설명을 벡터에 추가합니다.- 삭제할 작업 번호를 읽습니다.
- 작업 번호가 유효한 범위(1부터 벡터의 크기까지) 내에 있는지 확인합니다.
- 작업 번호가 유효하지 않으면 오류 메시지를 출력합니다.
- 작업 번호가 유효하면
.erase()메서드를 사용하여 지정된 위치의 작업을 제거합니다. - 어떤 작업이 제거되었는지 보여주는 확인 메시지를 출력합니다.
- 남은 작업들을 번호가 매겨진 목록 형식으로 표시합니다.
- 업데이트된 총 작업 수를 표시합니다.
중요 — cin과 getline() 혼용:
cin >> n으로 정수를 읽으면 입력 버퍼에 줄바꿈 문자('\n')가 남습니다. 그 후 getline()을 호출하면 실제 입력 대신 남은 줄바꿈 문자를 빈 문자열로 즉시 읽게 됩니다. 이를 해결하려면 cin >> n 바로 다음에 cin.ignore()를 호출하여 남은 줄바꿈 문자를 버리세요:
cin >> n;
cin.ignore(); // discard the leftover newline
for (int i = 0; i < n; i++) {
string task;
getline(cin, task); // now reads correctly
tasks.push_back(task);
}다음과 같은 정확한 출력 형식을 사용하세요:
유효하지 않은 작업 번호의 경우:
Welcome to Task List Tool!
Menu Options:
1. Add Task
2. View Tasks
3. Quit
Task list system initialized and ready!
Error: Invalid task number. Please enter a number between 1 and [total tasks].유효한 작업 삭제의 경우:
Welcome to Task List Tool!
Menu Options:
1. Add Task
2. View Tasks
3. Quit
Task list system initialized and ready!
Task "[removed task description]" removed successfully!
Remaining Tasks:
1. [first remaining task]
2. [second remaining task]
...
Total tasks: [updated number of tasks].erase()는 반복자(iterator)를 필요로 하므로, tasks.erase(tasks.begin() + index)를 사용하세요. 여기서 index는 0부터 시작하는 위치(taskNumber - 1)입니다. taskNumber가 0보다 크고 tasks.size()보다 작거나 같은지 확인하여 입력을 검증하세요. 삭제 후 목록이 비게 되면 남은 작업 목록 대신 "No tasks remaining."을 출력하세요.
직접 해보기
#include <iostream>
#include <vector>
#include <string>
int main() {
std::vector<std::string> tasks;
std::cout << "Welcome to Task List Tool!" << std::endl;
std::cout << std::endl;
std::cout << "Menu Options:" << std::endl;
std::cout << "1. Add Task" << std::endl;
std::cout << "2. View Tasks" << std::endl;
std::cout << "3. Quit" << std::endl;
std::cout << std::endl;
std::cout << "Task list system initialized and ready!" << std::endl;
int n;
std::cin >> n;
for (int i = 0; i < n; i++) {
std::string task;
std::cin >> task;
tasks.push_back(task);
}
if (tasks.empty()) {
std::cout << "No tasks available." << std::endl;
} else {
std::cout << "Your Tasks:" << std::endl;
for (int i = 0; i < tasks.size(); i++) {
std::cout << (i + 1) << ". " << tasks[i] << std::endl;
}
std::cout << "Total tasks: " << tasks.size() << std::endl;
}
return 0;
}