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

Erweitern 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 n Zeichenfolgen, die die Aufgabenbeschreibungen darstellen
  • Eine Ganzzahl taskNumber, die die Nummer der zu entfernenden Aufgabe darstellt (1-basierte Indizierung)

Ihr Programm sollte:

  1. Mit demselben Setup aus der vorherigen Lektion beginnen (leerer std::vector<std::string> namens tasks und Willkommensnachricht)
  2. Die Anzahl der Aufgaben mit cin >> n einlesen und dann cin.ignore() aufrufen, um den verbleibenden Zeilenumbruch zu verwurfen, bevor die Aufgaben-Strings mit getline() gelesen werden
  3. Jede Aufgabenbeschreibung mit push_back() zum Vektor hinzufügen
  4. Die zu entfernende Aufgabennummer einlesen
  5. Überprüfen, ob die Aufgabennummer im gültigen Bereich liegt (1 bis zur Größe des Vektors)
  6. Wenn die Aufgabennummer ungültig ist, eine Fehlermeldung ausgeben
  7. Wenn die Aufgabennummer gültig ist, die Methode .erase() verwenden, um die Aufgabe an der angegebenen Position zu entfernen
  8. Eine Bestätigungsmeldung ausgeben, die zeigt, welche Aufgabe entfernt wurde
  9. Die verbleibenden Aufgaben in einem nummerierten Listenformat anzeigen
  10. 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