Menu
CoddyTech

Menghapus Tugas

Termasuk bagian Logika dan Alur dalam perjalanan C++ di Coddy. Pelajaran 21 dari 56.

challenge icon

Tantangan

Mudah

Kembangkan task list tool dengan menerapkan fitur penghapusan untuk menghapus tugas tertentu dari daftar. Ini melanjutkan pelajaran sebelumnya dengan menambahkan kemampuan untuk menghapus tugas berdasarkan nomor posisinya.

Input berikut akan diberikan:

  • Bilangan bulat n yang menunjukkan jumlah tugas yang akan ditambahkan pada awalnya
  • Lalu n string yang berisi deskripsi tugas
  • Bilangan bulat taskNumber yang menunjukkan nomor tugas yang akan dihapus (indeks dimulai dari 1)

Programmu harus:

  1. Memulai dengan pengaturan yang sama seperti pada pelajaran sebelumnya (std::vector<std::string> kosong bernama tasks dan pesan sambutan)
  2. Membaca jumlah tugas dengan cin >> n, lalu memanggil cin.ignore() untuk membuang karakter baris baru yang tersisa sebelum membaca string tugas dengan getline()
  3. Menambahkan setiap deskripsi tugas ke vector menggunakan push_back()
  4. Membaca nomor tugas yang akan dihapus
  5. Memastikan nomor tugas berada dalam rentang yang valid (1 hingga ukuran vector)
  6. Jika nomor tugas tidak valid, mencetak pesan error
  7. Jika nomor tugas valid, menggunakan method .erase() untuk menghapus tugas pada posisi yang ditentukan
  8. Mencetak pesan konfirmasi yang menunjukkan tugas mana yang dihapus
  9. Menampilkan tugas yang tersisa dalam format daftar bernomor
  10. Menampilkan jumlah total tugas yang telah diperbarui

Penting: mencampur cin dan getline():
Saat kamu membaca bilangan bulat dengan cin >> n, karakter baris baru ('\n') akan tertinggal di buffer input. Jika kamu lalu memanggil getline(), fungsi itu akan langsung membaca karakter baris baru yang tersisa tersebut sebagai string kosong, bukan input sebenarnya. Untuk mengatasinya, panggil cin.ignore() tepat setelah cin >> n untuk membuang karakter baris baru yang tersisa:

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);
}

Gunakan format output persis seperti berikut:

Untuk nomor tugas yang tidak valid:

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].

Untuk penghapusan tugas yang valid:

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]

Ingat, .erase() memerlukan iterator, jadi gunakan tasks.erase(tasks.begin() + index), dengan index sebagai posisi berbasis 0 (taskNumber - 1). Validasi input dengan memeriksa apakah taskNumber lebih besar dari 0 dan kurang dari atau sama dengan tasks.size(). Jika daftar menjadi kosong setelah penghapusan, cetak "No tasks remaining." sebagai pengganti daftar tugas yang tersisa.

Coba sendiri

#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;
}

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler C++ online