Menu
CoddyTech

最终代码

本课属于 Coddy Rust 学习旅程的“逻辑与流程”单元。第 19 课,共 66 课。

challenge icon

挑战

简单

你会收到 4 个输入,它们表示一个完整的待办事项列表工作流程:第一个是以逗号分隔的初始任务列表;第二个是要添加的新任务;第三个是要查看的任务编号(从 1 开始索引);第四个是要移除的任务编号(从 1 开始索引)。请创建一个完整的待办事项列表管理器,处理所有这些操作并显示最终状态。

要求:

  • 读取第一个输入,其中包含以逗号分隔的任务描述(例如,Buy groceries,Call dentist,Finish homework)
  • 按逗号拆分字符串,并用这些初始任务创建一个可变向量
  • 读取第二个输入,并使用 .push() 将这个新任务添加到向量中
  • 读取第三个输入,并将其转换为整数(要查看的任务编号,从 1 开始)
  • 读取第四个输入,并将其转换为整数(要移除的任务编号,从 1 开始)
  • 将从 1 开始的索引转换为从 0 开始的索引,并使用 .remove() 移除指定任务
  • 打印 Total tasks: X,其中 X 是最终的任务数量
  • 打印 Viewing task: Y,其中 Y 是请求查看的任务编号
  • 遍历最终的任务列表,并按编号(从 1 开始)打印每个任务
  • 对于与查看编号匹配的任务(考虑移除任务后的编号调整),打印:[X] [task description] (selected)
  • 对于其他所有任务,打印:[X] [task description]

输入:

  • 第一行:以逗号分隔的任务描述(例如,Buy groceries,Call dentist,Finish homework)
  • 第二行:要添加的新任务(例如,Study for exam)
  • 第三行:表示要查看的任务编号的整数(从 1 开始索引)
  • 第四行:表示要移除的任务编号的整数(从 1 开始索引)

输出:

  • 第一行:Total tasks: X,其中 X 是最终的任务数量
  • 第二行:Viewing task: Y,其中 Y 是请求查看的编号
  • 后续各行:按 [X] [task description] 的格式打印每个任务及其编号
  • 选中的任务(与查看编号匹配)后面应附加 (selected)

亲手试试

use std::io::{self, BufRead};

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    
    // 读取用逗号分隔的初始任务
    let initial_tasks = lines.next().unwrap().unwrap();
    
    // 读取要添加的新任务
    let new_task = lines.next().unwrap().unwrap();
    
    // 读取要查看的任务编号(从 1 开始)
    let view_number: usize = lines.next().unwrap().unwrap().trim().parse().unwrap();
    
    // 读取要删除的任务编号(从 1 开始)
    let remove_number: usize = lines.next().unwrap().unwrap().trim().parse().unwrap();
    
    // TODO:在下方编写你的代码
    // 1. 按逗号拆分 initial_tasks,创建一个可变向量
    // 2. 将 new_task 添加到向量中
    // 3. 删除 remove_number 对应的任务(将其转换为从 0 开始的索引)
    // 4. 输出任务总数和要查看的任务信息
    // 5. 遍历最终的列表,输出每个任务
    
}

逻辑与流程中的所有课

自己练习: Rust 在线编译器