Menu
Coddy logo textTech

タスクの削除

CoddyのC++ジャーニー「論理と制御フロー」セクションの一部。レッスン 21/56。

challenge icon

チャレンジ

簡単

タスクリストツールを拡張し、リストから特定のタスクを削除する remove 機能を実装してください。これは、位置番号でタスクを削除できる機能を追加することで、前のレッスンを発展させたものです。

次の入力が与えられます:

  • 最初に追加するタスク数を表す整数 n
  • 続いて、タスクの説明を表す n 個の文字列
  • 削除するタスク番号(1始まりのインデックス)を表す整数 taskNumber

プログラムでは、次の処理を行ってください:

  1. 前のレッスンと同じセットアップ(空の std::vector<std::string> named tasks と welcome message)から開始する
  2. cin >> n でタスク数を読み取り、その後 cin.ignore() を呼び出して leftover newline を破棄してから、getline() で task strings を読み取る
  3. push_back() を使用して各 task description を vector に追加する
  4. 削除する task number を読み取る
  5. task number が有効な範囲(1 から vector の size まで)にあることを検証する
  6. task number が無効な場合は、エラーメッセージを表示する
  7. task number が有効な場合は、.erase() method を使用して指定された位置の task を削除する
  8. どの task が削除されたかを示す confirmation message を表示する
  9. 残りの tasks を番号付きリスト形式で表示する
  10. 更新された tasks の合計数を表示する

重要:cingetline() の混在:
cin >> n で整数を読み取ると、入力バッファには newline character('\n')が残ります。その後に getline() を呼び出すと、実際の入力ではなく、その leftover newline を空の string として直ちに読み取ってしまいます。これを修正するには、cin >> n の直後に cin.ignore() を呼び出して leftover newline を破棄します:

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

次の正確な出力形式を使用してください:

無効な task number の場合:

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

有効な task removal の場合:

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() には iterator が必要なので、index が 0-based position(taskNumber - 1)である場合は、tasks.erase(tasks.begin() + index) を使用してください。taskNumber が 0 より大きく、tasks.size() 以下であるかを確認して、入力を検証してください。削除後にリストが空になった場合は、残りの tasks list の代わりに "No tasks remaining." を表示してください。

自分で試してみよう

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

論理と制御フローのすべてのレッスン

自分で練習してみよう: C++オンラインコンパイラ