Menu
Coddy logo textTech

Eine Aufgabe entfernen

Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy. Lektion 21 von 56.

challenge icon

Aufgabe

Einfach

Erweitere 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 n Zeichenketten, die die Aufgabenbeschreibungen darstellen
  • Eine Ganzzahl taskNumber, die die zu entfernende Aufgabennummer angibt (1-basierte Indizierung)

Dein Programm sollte:

  1. Mit derselben Einrichtung wie in der vorherigen Lektion beginnen (leerer std::vector<std::string> namens tasks und Begrüßungsnachricht)
  2. Die Anzahl der Aufgaben mit cin >> n einlesen und anschließend cin.ignore() aufrufen, um den verbleibenden Zeilenumbruch zu verwerfen, bevor die Aufgabenzeichenketten mit getline() eingelesen werden
  3. Jede Aufgabenbeschreibung mithilfe von push_back() zum Vektor hinzufügen
  4. Die zu entfernende Aufgabennummer einlesen
  5. Überprüfen, ob die Aufgabennummer innerhalb des gültigen Bereichs liegt (1 bis zur Größe des Vektors)
  6. Bei einer ungültigen Aufgabennummer eine Fehlermeldung ausgeben
  7. Bei einer gültigen Aufgabennummer die Methode .erase() verwenden, um die Aufgabe an der angegebenen Position zu entfernen
  8. Eine Bestätigungsnachricht ausgeben, die zeigt, welche Aufgabe entfernt wurde
  9. Die verbleibenden Aufgaben in einem nummerierten Listenformat anzeigen
  10. 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

Übe selbstständig: Online-C++-Compiler