最终代码
本课属于 Coddy Rust 学习旅程的“逻辑与流程”单元。第 19 课,共 66 课。
挑战
简单你会收到 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 在线编译器