Rimuovere un’attività
Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 21 di 56.
Sfida
FacileEstendi il tuo strumento per gli elenchi di attività implementando la funzionalità di rimozione per eliminare attività specifiche dall’elenco. Questa lezione si basa sulla precedente e aggiunge la possibilità di rimuovere le attività in base al loro numero di posizione.
Verranno forniti i seguenti input:
- Un intero
nche rappresenta il numero di attività da aggiungere inizialmente - Quindi
nstringhe che rappresentano le descrizioni delle attività - Un intero
taskNumberche rappresenta il numero dell’attività da rimuovere (indicizzazione a partire da 1)
Il tuo programma dovrebbe:
- Iniziare con la stessa configurazione della lezione precedente (un
std::vector<std::string>vuoto chiamatotaskse il messaggio di benvenuto) - Leggere il numero di attività con
cin >> n, quindi chiamarecin.ignore()per scartare il carattere di nuova riga residuo prima di leggere le stringhe delle attività congetline() - Aggiungere la descrizione di ogni attività al vettore usando
push_back() - Leggere il numero dell’attività da rimuovere
- Verificare che il numero dell’attività sia compreso nell’intervallo valido (da 1 alla dimensione del vettore)
- Se il numero dell’attività non è valido, stampare un messaggio di errore
- Se il numero dell’attività è valido, usare il metodo
.erase()per rimuovere l’attività nella posizione specificata - Stampare un messaggio di conferma che mostri quale attività è stata rimossa
- Visualizzare le attività rimanenti in un elenco numerato
- Mostrare il numero totale di attività aggiornato
Importante: combinare cin e getline():
Quando leggi un intero con cin >> n, nel buffer di input rimane un carattere di nuova riga ('\n'). Se poi chiami getline(), leggerà immediatamente quel carattere di nuova riga residuo come stringa vuota invece dell’input effettivo. Per risolvere il problema, chiama cin.ignore() subito dopo cin >> n per scartare il carattere di nuova riga residuo:
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 il seguente formato di output esatto:
Per un numero di attività non valido:
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].Per la rimozione di un’attività valida:
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]Ricorda che .erase() richiede un iteratore, quindi usa tasks.erase(tasks.begin() + index) dove index è la posizione a partire da 0 (taskNumber - 1). Convalida l’input verificando che taskNumber sia maggiore di 0 e minore o uguale a tasks.size(). Se l’elenco diventa vuoto dopo la rimozione, stampa "No tasks remaining." invece dell’elenco delle attività rimanenti.
Provalo tu
#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;
}Tutte le lezioni di Logica e flusso
1Puntatori e memoria
Che cos'è un puntatore?Operatore indirizzoOperatore di dereferenziazionePuntatori nulliPuntatori e arrayMemoria dinamica con 'new'Liberare la memoria con 'delete'Riepilogo - Esercizi sui puntatori2Vettori (array dinamici)
Introduzione a std::vectorCreare un vettoreAggiungere elementiAccedere agli elementiDimensione del vettoreIterare con un ciclo forCiclo for basato su intervalloRimuovere elementiRiepilogo - Operazioni sui vettori5Progetto: strumento per l’inventario
Configurazione del progettoAggiunta e aggiornamento degli articoli3Progetto: Strumento per l’elenco delle attività
Panoramica del progettoAggiungere un’attivitàEsercitati da solo: Compilatore C++ online