Menu
Coddy logo textTech

Eliminar una tarea

Parte de la sección Lógica y Flujo del Journey de C++ de Coddy. Lección 21 de 56.

challenge icon

Desafío

Fácil

Amplía tu herramienta de lista de tareas implementando la funcionalidad de eliminación para borrar tareas específicas de la lista. Esto se basa en la lección anterior al añadir la posibilidad de eliminar tareas mediante su número de posición.

Se proporcionarán las siguientes entradas:

  • Un entero n que representa el número de tareas que se añadirán inicialmente
  • Después, n cadenas que representan las descripciones de las tareas
  • Un entero taskNumber que representa el número de tarea que se eliminará (indexación basada en 1)

Tu programa debe:

  1. Comenzar con la misma configuración de la lección anterior (un std::vector<std::string> vacío llamado tasks y el mensaje de bienvenida)
  2. Leer el número de tareas con cin >> n y después llamar a cin.ignore() para descartar el salto de línea restante antes de leer las cadenas de tareas con getline()
  3. Añadir cada descripción de tarea al vector usando push_back()
  4. Leer el número de tarea que se eliminará
  5. Validar que el número de tarea esté dentro del rango válido (de 1 al tamaño del vector)
  6. Si el número de tarea no es válido, mostrar un mensaje de error
  7. Si el número de tarea es válido, usar el método .erase() para eliminar la tarea de la posición especificada
  8. Mostrar un mensaje de confirmación indicando qué tarea se eliminó
  9. Mostrar las tareas restantes en formato de lista numerada
  10. Mostrar el número total actualizado de tareas

Importante: mezclar cin y getline():
Cuando lees un entero con cin >> n, queda un carácter de salto de línea ('\n') en el búfer de entrada. Si después llamas a getline(), leerá inmediatamente ese salto de línea restante como una cadena vacía en lugar de tu entrada real. Para solucionarlo, llama a cin.ignore() justo después de cin >> n para descartar el salto de línea restante:

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

Usa el siguiente formato de salida exacto:

Para un número de tarea no válido:

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

Para una eliminación de tarea válida:

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]

Recuerda que .erase() requiere un iterador, así que usa tasks.erase(tasks.begin() + index), donde index es la posición basada en 0 (taskNumber - 1). Valida la entrada comprobando si taskNumber es mayor que 0 y menor o igual que tasks.size(). Si la lista queda vacía después de la eliminación, muestra "No tasks remaining." en lugar de la lista de tareas restantes.

Pruébalo tú mismo

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

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de C++ online