할 일 삭제하기
Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨. 56개 중 21번째.
챌린지
쉬움작업 목록 도구를 확장하여 목록에서 특정 작업을 삭제하는 제거 기능을 구현하세요. 이전 레슨을 기반으로 하며, 위치 번호로 작업을 제거하는 기능을 추가합니다.
다음 입력이 제공됩니다:
- 처음에 추가할 작업 수를 나타내는 정수
n - 그다음 작업 설명을 나타내는
n개의 문자열 - 제거할 작업 번호를 나타내는 정수
taskNumber(1부터 시작하는 인덱싱)
프로그램은 다음을 수행해야 합니다:
- 이전 레슨과 동일한 설정으로 시작합니다 (
std::vector<std::string>이름이tasks인 빈 벡터와 환영 메시지). cin >> n을 사용하여 작업 수를 읽은 다음cin.ignore()을 호출하여getline()으로 작업 문자열을 읽기 전에 남아 있는 개행 문자를 버립니다.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()에는 반복자가 필요하므로 index가 0부터 시작하는 위치(taskNumber - 1)일 때 tasks.erase(tasks.begin() + index)를 사용해야 합니다. 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;
}로직과 흐름의 모든 레슨
직접 연습해 보세요: 온라인 C++ 컴파일러