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 task en implémentant la fonctionnalité de suppression afin de supprimer des task spécifiques de la liste. Cela s’appuie sur la leçon précédente en ajoutant la possibilité de supprimer des task selon leur position.
Les entrées suivantes seront fournies :
- Un entier
nreprésentant le nombre de task à ajouter initialement - Puis
nchaînes représentant les descriptions des task - Un entier
taskNumberreprésentant le numéro de task à supprimer (indexation à partir de 1)
Votre programme doit :
- Commencer avec la même configuration que dans la leçon précédente (
std::vector<std::string>vide nommétaskset message de bienvenue) - Lire le nombre de task avec
cin >> n, puis appelercin.ignore()pour supprimer le retour à la ligne restant avant de lire les chaînes de task avecgetline() - Ajouter chaque description de task au vecteur à l’aide de
push_back() - Lire le numéro de task à supprimer
- Vérifier que le numéro de task se trouve dans la plage valide (1 à la taille du vecteur)
- Si le numéro de task n’est pas valide, afficher un message d’erreur
- Si le numéro de task est valide, utiliser la méthode
.erase()pour supprimer le task à la position spécifiée - Afficher un message de confirmation indiquant quel task a été supprimé
- Afficher les task restants sous forme de liste numérotée
- Afficher le nombre total de task mis à jour
Important : mélanger cin et getline() :
Lorsque vous lisez un entier avec cin >> n, un caractère de nouvelle ligne ('\n') reste dans le tampon d’entrée. Si vous appelez ensuite getline(), cette fonction lira immédiatement ce retour à la ligne restant comme une chaîne vide au lieu de votre entrée réelle. Pour résoudre ce problème, appelez cin.ignore() juste après cin >> n afin de supprimer le retour à la ligne restant :
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 le format de sortie exact suivant :
Pour un numéro de task non valide :
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 la suppression d’un task 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 correspond à 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 task restants.
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âcheEntraînez-vous par vous-même : Compilateur C++ en ligne