Menu
Coddy logo textTech

Görev Silme

Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 21 / 56.

challenge icon

Görev

Kolay

Görev listesi aracınızı, listeden belirli görevleri silmek için kaldırma işlevini uygulayarak genişletin. Bu, görevleri konum numaralarına göre kaldırma yeteneği ekleyerek önceki dersin üzerine inşa edilir.

Aşağıdaki girdiler sağlanacaktır:

  • Başlangıçta eklenecek görev sayısını temsil eden bir tam sayı n
  • Ardından görev açıklamalarını temsil eden n adet dize
  • Kaldırılacak görev numarasını temsil eden bir tam sayı taskNumber (1 tabanlı indeksleme)

Programınız şunları yapmalıdır:

  1. Önceki dersteki aynı kurulumla başlayın (tasks adında boş bir std::vector<std::string> ve karşılama mesajı)
  2. Görev sayısını cin >> n ile okuyun, ardından getline() ile görev dizelerini okumadan önce kalan yeni satır karakterini atmak için cin.ignore() işlevini çağırın
  3. push_back() kullanarak her bir görev açıklamasını vektöre ekleyin
  4. Kaldırılacak görev numarasını okuyun
  5. Görev numarasının geçerli aralıkta (1 ile vektörün boyutu arasında) olduğunu doğrulayın
  6. Görev numarası geçersizse, bir hata mesajı yazdırın
  7. Görev numarası geçerliyse, belirtilen konumdaki görevi kaldırmak için .erase() yöntemini kullanın
  8. Hangi görevin kaldırıldığını gösteren bir onay mesajı yazdırın
  9. Kalan görevleri numaralandırılmış bir liste formatında görüntüleyin
  10. Güncellenmiş toplam görev sayısını gösterin

Önemli — cin ve getline() kullanımını karıştırmak:
cin >> n ile bir tam sayı okuduğunuzda, giriş tamponunda bir yeni satır karakteri ('\n') bırakır. Daha sonra getline() işlevini çağırırsanız, gerçek girişiniz yerine o kalan yeni satırı hemen boş bir dize olarak okuyacaktır. Bunu düzeltmek için, kalan yeni satırı atmak üzere cin >> n işleminden hemen sonra cin.ignore() işlevini çağırın:

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

Aşağıdaki tam çıktı formatını kullanın:

Geçersiz görev numarası için:

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

Geçerli görev kaldırma için:

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]

.erase() yönteminin bir yineleyici (iterator) gerektirdiğini unutmayın, bu nedenle index değerinin 0 tabanlı konum (taskNumber - 1) olduğu tasks.erase(tasks.begin() + index) ifadesini kullanın. taskNumber değerinin 0'dan büyük ve tasks.size() değerine eşit veya ondan küçük olup olmadığını kontrol ederek girişi doğrulayın. Kaldırma işleminden sonra liste boşalırsa, kalan görevler listesi yerine "No tasks remaining." yazdırın.

Kendin dene

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

Mantık & Akış bölümündeki tüm dersler