如何在原生Rust中读取两个整数并作为命名元组获取?
原生Rust实现获取恰好两个输入整数(等价Python逻辑)
对应你给出的Python代码逻辑,原生Rust可以通过以下方式实现相同效果,获取两个整数并组成元组:
核心实现代码
use std::io; fn main() { // 初始化字符串存储输入 let mut input = String::new(); // 读取一行输入,处理读取失败的情况 io::stdin().read_line(&mut input).expect("读取输入失败"); // 按单个空格分割输入,过滤空字符串后尝试解析为整数 let mut num_iter = input.trim() .split(' ') .filter(|s| !s.is_empty()) .map(|s| s.parse::<i32>()); // 提取第一个整数,处理输入不足或解析失败的情况 let a = num_iter.next() .unwrap_or_else(|| panic!("输入不足两个整数")) .expect("第一个输入不是有效整数"); // 提取第二个整数 let b = num_iter.next() .unwrap_or_else(|| panic!("输入不足两个整数")) .expect("第二个输入不是有效整数"); // 检查是否存在多余输入,确保恰好两个整数 if num_iter.next().is_some() { panic!("输入的整数数量超过两个"); } // 组成元组,可直接解构使用 let (a, b) = (a, b); println!("获取到的两个整数:{} 和 {}", a, b); }
代码说明
- 读取输入:用
std::io::stdin().read_line()读取一行用户输入,存入字符串变量中。 - 分割与过滤:
trim()去除输入首尾的空白和换行符,split(' ')按单个空格分割(和Python的split(" ")行为对齐),再通过filter去掉连续空格产生的空字符串。 - 解析整数:
map将每个分割后的字符串尝试解析为i32类型(可根据需求替换为i64、u32等其他整数类型)。 - 提取与校验:通过
next()从迭代器中取出前两个解析结果,同时处理输入不足、解析失败的情况;最后检查迭代器是否还有剩余元素,确保输入恰好是两个整数。 - 元组使用:将两个整数组成普通元组,Rust中可以直接像Python一样解构使用(
let (a, b) = ...)。
内容的提问来源于stack exchange,提问作者rustafari
相关产品推荐
相关产品推荐

