Usuwanie zadania
Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 21 z 56.
Wyzwanie
ŁatwyRozszerz swoje narzędzie do tworzenia listy zadań, implementując funkcję usuwania, która usuwa wybrane zadania z listy. To rozwija poprzednią lekcję, dodając możliwość usuwania zadań na podstawie ich numeru pozycji.
Podane zostaną następujące dane wejściowe:
- Liczba całkowita
noznaczająca początkową liczbę zadań do dodania - Następnie
nciągów znaków z opisami zadań - Liczba całkowita
taskNumberoznaczająca numer zadania do usunięcia (numeracja od 1)
Twój program powinien:
- Rozpocząć od takiej samej konfiguracji jak w poprzedniej lekcji (pusty
std::vector<std::string>o nazwietasksi powitalny komunikat) - Wczytać liczbę zadań za pomocą
cin >> n, a następnie wywołaćcin.ignore(), aby odrzucić pozostały znak nowej linii przed wczytaniem ciągów znaków zadań za pomocągetline() - Dodać każdy opis zadania do tablicy, używając
push_back() - Wczytać numer zadania do usunięcia
- Sprawdzić, czy numer zadania mieści się w prawidłowym zakresie (od 1 do rozmiaru tablicy)
- Jeśli numer zadania jest nieprawidłowy, wypisać komunikat o błędzie
- Jeśli numer zadania jest prawidłowy, użyć metody
.erase(), aby usunąć zadanie z określonej pozycji - Wypisać komunikat potwierdzający, które zadanie zostało usunięte
- Wyświetlić pozostałe zadania w formie ponumerowanej listy
- Wyświetlić zaktualizowaną łączną liczbę zadań
Ważne: łączenie cin i getline():
Gdy wczytujesz liczbę całkowitą za pomocą cin >> n, w buforze wejściowym pozostaje znak nowej linii ('\n'). Jeśli następnie wywołasz getline(), odczyta on od razu ten pozostały znak nowej linii jako pusty ciąg znaków zamiast rzeczywistych danych wejściowych. Aby temu zapobiec, wywołaj cin.ignore() zaraz po cin >> n, aby odrzucić pozostały znak nowej linii:
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);
}Użyj następującego dokładnego formatu wyjściowego:
W przypadku nieprawidłowego numeru zadania:
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].W przypadku prawidłowego usunięcia zadania:
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]Pamiętaj, że .erase() wymaga iteratora, dlatego użyj tasks.erase(tasks.begin() + index), gdzie index jest pozycją liczoną od 0 (taskNumber - 1). Sprawdź poprawność danych wejściowych, weryfikując, czy taskNumber jest większe od 0 i mniejsze lub równe tasks.size(). Jeśli po usunięciu lista będzie pusta, wypisz "No tasks remaining." zamiast listy pozostałych zadań.
Spróbuj swoich sił
#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;
}Wszystkie lekcje w sekcji Logika i przepływ programu
1Wskaźniki i pamięć
Czym jest wskaźnik?Operator pobrania adresuOperator dereferencjiWskaźniki zeroweWskaźniki i tabliceDynamiczne zarządzanie pamięcią za pomocą „new”Zwalnianie pamięci za pomocą „delete”Podsumowanie — ćwiczenia ze wskaźnikami2Wektory (tablice dynamiczne)
Wprowadzenie do std::vectorTworzenie wektoraDodawanie elementówDostęp do elementówRozmiar wektoraIterowanie za pomocą pętli forPętla for oparta na zakresieUsuwanie elementówPodsumowanie — operacje na wektorach5Projekt: Narzędzie do zarządzania zapasami
Konfiguracja projektuDodawanie i aktualizowanie produktów3Projekt: narzędzie do listy zadań
Przegląd projektuDodawanie zadaniaPoćwicz samodzielnie: Kompilator C++ online