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ácilExtiende 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 capacidad de eliminar tareas por su número de posición.
Se proporcionarán las siguientes entradas:
- Un entero
nque representa el número de tareas a añadir inicialmente - Luego
ncadenas que representan las descripciones de las tareas - Un entero
taskNumberque representa el número de tarea a 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 >> n, luego llamar acin.ignore()para descartar el salto de línea sobrante 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 a eliminar
- Validar que el número de tarea esté dentro del rango válido (1 al tamaño del vector)
- Si el número de tarea no es válido, imprimir un mensaje de error
- Si el número de tarea es válido, usar el método
.erase()para eliminar la tarea en la posición especificada - Imprimir un mensaje de confirmación que muestre qué tarea fue eliminada
- Mostrar las tareas restantes en un formato de lista numerada
- Mostrar el número total actualizado de tareas
Importante — mezclar cin y getline():
Cuando lees un entero con cin >> n, este deja un carácter de salto de línea ('\n') en el búfer de entrada. Si luego llamas a getline(), este leerá inmediatamente ese salto de línea sobrante como una cadena vacía en lugar de tu entrada real. Para solucionar esto, llama a cin.ignore() justo después de cin >> n para descartar el salto de línea sobrante:
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);
}Utiliza exactamente el siguiente formato de salida:
Para un número de tarea invá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 a tasks.size(). Si la lista queda vacía después de la eliminación, imprime "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 tarea