Eliminar una tarea
Parte de la sección Lógica y Flujo del Journey de C++ de Coddy. Lección 21 de 56.
Desafío
FácilAmplí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
nque representa el número de tareas que se añadirán inicialmente - Después,
ncadenas que representan las descripciones de las tareas - Un entero
taskNumberque representa el número de tarea que se eliminará (indexación basada en 1)
Tu programa debe:
- Comenzar con la misma configuración de la lección anterior (un
std::vector<std::string>vacío llamadotasksy el mensaje de bienvenida) - Leer el número de tareas con
cin >> ny después llamar acin.ignore()para descartar el salto de línea restante antes de leer las cadenas de tareas congetline() - Añadir cada descripción de tarea al vector usando
push_back() - Leer el número de tarea que se eliminará
- Validar que el número de tarea esté dentro del rango válido (de 1 al tamaño del vector)
- Si el número de tarea no es válido, mostrar un mensaje de error
- Si el número de tarea es válido, usar el método
.erase()para eliminar la tarea de la posición especificada - Mostrar un mensaje de confirmación indicando qué tarea se eliminó
- Mostrar las tareas restantes en formato de lista numerada
- 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
1Punteros y memoria
¿Qué es un puntero?Operador de direcciónOperador de desreferenciaPunteros nulosPunteros y arraysMemoria dinámica con 'new'Liberar memoria con 'delete'Resumen: Práctica de punteros2Vectores (Arrays dinámicos)
Introducción a std::vectorCreación de un VectorAgregar elementosAcceder a los elementosTamaño del VectorIterar con un bucle ForBucle For basado en rangosEliminar elementosResumen - Operaciones con Vectores5Proyecto: Herramienta de inventario
Configuración del proyectoAgregar y actualizar artículos3Proyecto: Herramienta de lista de tareas
Descripción general del proyectoAñadir una tareaPractica por tu cuenta: Compilador de C++ online