Supprimer une tâche
Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 21 sur 56.
Défi
FacileÉtendez votre outil de liste de tâches en implémentant la fonctionnalité de suppression pour effacer des tâches spécifiques de la liste. Cela s'appuie sur la leçon précédente en ajoutant la possibilité de supprimer des tâches par leur numéro de position.
Les entrées suivantes seront fournies :
- Un entier
nreprésentant le nombre de tâches à ajouter initialement - Ensuite,
nchaînes de caractères représentant les descriptions des tâches - Un entier
taskNumberreprésentant le numéro de la tâche à supprimer (indexation commençant à 1)
Votre programme doit :
- Commencer avec la même configuration que la leçon précédente (un
std::vector<std::string>vide nommétaskset un message de bienvenue) - Lire le nombre de tâches avec
cin >> n, puis appelercin.ignore()pour ignorer le caractère de nouvelle ligne restant avant de lire les chaînes de tâches avecgetline() - Ajouter chaque description de tâche au vecteur en utilisant
push_back() - Lire le numéro de la tâche à supprimer
- Valider que le numéro de la tâche est dans la plage valide (de 1 à la taille du vecteur)
- Si le numéro de la tâche est invalide, afficher un message d'erreur
- Si le numéro de la tâche est valide, utiliser la méthode
.erase()pour supprimer la tâche à la position spécifiée - Afficher un message de confirmation indiquant quelle tâche a été supprimée
- Afficher les tâches restantes sous forme de liste numérotée
- Afficher le nombre total de tâches mis à jour
Important — mélanger cin et getline() :
Lorsque vous lisez un entier avec cin >> n, cela laisse un caractère de nouvelle ligne ('\n') dans le tampon d'entrée. Si vous appelez ensuite getline(), il lira immédiatement cette nouvelle ligne restante comme une chaîne vide au lieu de votre saisie réelle. Pour corriger cela, appelez cin.ignore() juste après cin >> n pour ignorer la nouvelle ligne 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);
}Utilisez exactement le format de sortie suivant :
Pour un numéro de tâche invalide :
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].Pour une suppression de tâche valide :
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]N'oubliez pas que .erase() nécessite un itérateur, utilisez donc tasks.erase(tasks.begin() + index) où index est la position basée sur 0 (taskNumber - 1). Validez l'entrée en vérifiant si taskNumber est supérieur à 0 et inférieur ou égal à tasks.size(). Si la liste devient vide après la suppression, affichez "No tasks remaining." au lieu de la liste des tâches restantes.
Essayez vous-même
#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;
}Toutes les leçons de Logique et Flux
1Pointeurs et mémoire
Qu'est-ce qu'un pointeur ?Opérateur d'adresseOpérateur de déréférencementPointeurs nulsPointeurs et tableauxMémoire dynamique avec 'new'Libérer la mémoire avec 'delete'Récapitulatif - Pratique des pointeurs2Vecteurs (Tableaux dynamiques)
Introduction à std::vectorCréer un vecteurAjouter des élémentsAccéder aux élémentsTaille d'un vecteurItérer avec une boucle ForBoucle For basée sur l'intervalleSupprimer des élémentsRécapitulatif - Opérations sur les vecteurs3Projet : Outil de liste de tâches
Présentation du projetAjouter une tâche