Menu
Coddy logo textTech

Удаление задачи

Часть раздела Логика и управление потоком путешествия по C++ на Coddy. Урок 21 из 56.

challenge icon

Задание

Легко

Расширьте свой инструмент списка задач, реализовав функциональность удаления для удаления определённых задач из списка. Это продолжает предыдущий урок, добавляя возможность удалять задачи по их порядковому номеру.

Будут предоставлены следующие входные данные:

  • Целое число n, представляющее исходное количество добавляемых задач
  • Затем n строк, представляющих описания задач
  • Целое число taskNumber, представляющее номер удаляемой задачи (индексация с 1)

Ваша программа должна:

  1. Начать с той же настройки, что и в предыдущем уроке (пустой std::vector<std::string> с именем tasks и приветственное сообщение)
  2. Считать количество задач с помощью cin >> n, затем вызвать cin.ignore(), чтобы пропустить оставшийся символ новой строки перед чтением строк задач с помощью getline()
  3. Добавить описание каждой задачи в вектор с помощью push_back()
  4. Считать номер удаляемой задачи
  5. Проверить, находится ли номер задачи в допустимом диапазоне (от 1 до размера вектора)
  6. Если номер задачи недопустим, вывести сообщение об ошибке
  7. Если номер задачи допустим, использовать метод .erase(), чтобы удалить задачу из указанной позиции
  8. Вывести подтверждающее сообщение с указанием удалённой задачи
  9. Отобразить оставшиеся задачи в виде нумерованного списка
  10. Показать обновлённое общее количество задач

Важно: смешивание cin и getline():
Когда вы считываете целое число с помощью cin >> n, в буфере ввода остаётся символ новой строки ('\n'). Если затем вызвать getline(), он немедленно считает этот оставшийся символ новой строки как пустую строку вместо фактических входных данных. Чтобы исправить это, вызовите cin.ignore() сразу после cin >> n, чтобы пропустить оставшийся символ новой строки:

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);
}

Используйте следующий точный формат вывода:

При недопустимом номере задачи:

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].

При успешном удалении задачи:

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]

Помните, что .erase() требует итератор, поэтому используйте tasks.erase(tasks.begin() + index), где index — это позиция с отсчётом от 0 (taskNumber - 1). Проверьте входные данные, убедившись, что taskNumber больше 0 и меньше или равно tasks.size(). Если после удаления список становится пустым, выведите "No tasks remaining." вместо списка оставшихся задач.

Попробуйте сами

#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;
}

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор C++