Eine Aufgabe entfernen
Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy. Lektion 21 von 56.
Aufgabe
EinfachErweitere dein Aufgabenlisten-Tool, indem du die Entfernungsfunktion implementierst, um bestimmte Aufgaben aus der Liste zu löschen. 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 anfängliche Anzahl der hinzuzufügenden Aufgaben angibt - Anschließend
nZeichenketten, die die Aufgabenbeschreibungen darstellen - Eine Ganzzahl
taskNumber, die die zu entfernende Aufgabennummer angibt (1-basierte Indizierung)
Dein Programm sollte:
- Mit derselben Einrichtung wie in der vorherigen Lektion beginnen (leerer
std::vector<std::string>namenstasksund Begrüßungsnachricht) - Die Anzahl der Aufgaben mit
cin >> neinlesen und anschließendcin.ignore()aufrufen, um den verbleibenden Zeilenumbruch zu verwerfen, bevor die Aufgabenzeichenketten mitgetline()eingelesen werden - Jede Aufgabenbeschreibung mithilfe von
push_back()zum Vektor hinzufügen - Die zu entfernende Aufgabennummer einlesen
- Überprüfen, ob die Aufgabennummer innerhalb des gültigen Bereichs liegt (1 bis zur Größe des Vektors)
- Bei einer ungültigen Aufgabennummer eine Fehlermeldung ausgeben
- Bei einer gültigen Aufgabennummer die Methode
.erase()verwenden, um die Aufgabe an der angegebenen Position zu entfernen - Eine Bestätigungsnachricht ausgeben, die zeigt, welche Aufgabe entfernt wurde
- Die verbleibenden Aufgaben in einem nummerierten Listenformat anzeigen
- Die aktualisierte Gesamtanzahl der Aufgaben anzeigen
Wichtig: cin und getline() mischen:
Wenn du eine Ganzzahl mit cin >> n einliest, verbleibt ein Zeilenumbruchzeichen ('\n') im Eingabepuffer. Wenn du anschließend getline() aufrufst, liest es sofort diesen verbleibenden Zeilenumbruch als leere Zeichenkette anstelle deiner tatsächlichen Eingabe. Rufe direkt nach cin.ignore() cin >> n auf, um den verbleibenden Zeilenumbruch zu verwerfen:
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);
}Verwende 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 das Entfernen einer gültigen Aufgabe:
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]Denke daran, dass .erase() einen Iterator erfordert. Verwende daher tasks.erase(tasks.begin() + index), wobei index die 0-basierte Position ist (taskNumber - 1). Überprüfe die Eingabe, indem du kontrollierst, ob taskNumber größer als 0 und kleiner oder gleich tasks.size() ist. Wenn die Liste nach dem Entfernen leer ist, gib stattdessen „No tasks remaining.“ aus und nicht die Liste der verbleibenden Aufgaben.
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Übe selbstständig: Online-C++-Compiler