Eine Aufgabe entfernen
Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 21 von 56.
Aufgabe
EinfachErweitern Sie Ihr Aufgabenlisten-Tool, indem Sie die Löschfunktion implementieren, um bestimmte Aufgaben aus der Liste zu entfernen. Dies baut auf der vorherigen Lektion auf, indem die Möglichkeit hinzugefügt wird, Aufgaben anhand ihrer Positionsnummer zu entfernen.
Die folgenden Eingaben werden bereitgestellt:
- Eine Ganzzahl
n, die die Anzahl der anfänglich hinzuzufügenden Aufgaben darstellt - Anschließend
nZeichenfolgen, die die Aufgabenbeschreibungen darstellen - Eine Ganzzahl
taskNumber, die die Nummer der zu entfernenden Aufgabe darstellt (1-basierte Indizierung)
Ihr Programm sollte:
- Mit demselben Setup aus der vorherigen Lektion beginnen (leerer
std::vector<std::string>namenstasksund Willkommensnachricht) - Die Anzahl der Aufgaben mit
cin >> neinlesen und danncin.ignore()aufrufen, um den verbleibenden Zeilenumbruch zu verwurfen, bevor die Aufgaben-Strings mitgetline()gelesen werden - Jede Aufgabenbeschreibung mit
push_back()zum Vektor hinzufügen - Die zu entfernende Aufgabennummer einlesen
- Überprüfen, ob die Aufgabennummer im gültigen Bereich liegt (1 bis zur Größe des Vektors)
- Wenn die Aufgabennummer ungültig ist, eine Fehlermeldung ausgeben
- Wenn die Aufgabennummer gültig ist, die Methode
.erase()verwenden, um die Aufgabe an der angegebenen Position zu entfernen - Eine Bestätigungsmeldung ausgeben, die zeigt, welche Aufgabe entfernt wurde
- Die verbleibenden Aufgaben in einem nummerierten Listenformat anzeigen
- Die aktualisierte Gesamtzahl der Aufgaben anzeigen
Wichtig — Mischen von cin und getline():
Wenn Sie eine Ganzzahl mit cin >> n einlesen, bleibt ein Zeilenumbruchzeichen ('\n') im Eingabepuffer zurück. Wenn Sie danach getline() aufrufen, wird dieser verbleibende Zeilenumbruch sofort als leerer String gelesen, anstatt Ihrer tatsächlichen Eingabe. Um dies zu beheben, rufen Sie cin.ignore() direkt nach cin >> n auf, um den verbleibenden Zeilenumbruch zu verwurfen:
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);
}Verwenden Sie das folgende exakte Ausgabeformat:
Für eine ungültige Aufgabennummer:
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].Für eine gültige Aufgabenentfernung:
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]Denken Sie daran, dass .erase() einen Iterator erfordert. Verwenden Sie daher tasks.erase(tasks.begin() + index), wobei index die 0-basierte Position (taskNumber - 1) ist. Validieren Sie die Eingabe, indem Sie prüfen, ob taskNumber größer als 0 und kleiner oder gleich tasks.size() ist. Wenn die Liste nach dem Entfernen leer ist, geben Sie "No tasks remaining." anstelle der Liste der verbleibenden Aufgaben aus.
Probier es selbst
#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;
}Alle Lektionen in Logik & Ablauf
1Pointer und Speicher
Was ist ein Pointer?AdressoperatorDereferenzierungsoperatorNull-PointerPointer und ArraysDynamischer Speicher mit 'new'Speicher freigeben mit 'delete'Zusammenfassung – Pointer-Übung2Vektoren (Dynamische Arrays)
Einführung in std::vectorEinen Vector erstellenElemente hinzufügenAuf Elemente zugreifenVector-GrößeIterieren mit einer For-SchleifeRange-based For-SchleifeElemente entfernenZusammenfassung – Vector-Operationen3Projekt: Aufgabenlisten-Tool
ProjektübersichtEine Aufgabe hinzufügen