Rust中与C++ std::istringstream等价的实现方法
Rust 实现类似 C++ std::istringstream 的令牌流功能
对应你给出的C++代码逻辑,Rust里可以通过字符串分割和类型解析来实现相同的令牌流处理效果,以下是具体实现:
核心思路
C++的std::istringstream通过>>运算符按空白分割字符串并自动转换类型,Rust中可以用split_whitespace()方法分割字符串,再结合parse()完成类型转换,同时处理解析过程中的错误。
对应Rust代码示例
use std::fs::File; use std::io::{BufRead, BufReader}; fn main() -> std::io::Result<()> { let file_handle = File::open("your_file.txt")?; let reader = BufReader::new(file_handle); for line in reader.lines() { let data = line?; // 跳过空行或#开头的行 if data.is_empty() || data.starts_with('#') { continue; } let mut tokens = data.split_whitespace(); // 解析令牌,处理可能的解析错误 let ctype = match tokens.next() { Some(s) => s.to_string(), None => { eprintln!("Invalid line: missing ctype"); continue; } }; let name = match tokens.next() { Some(s) => s.to_string(), None => { eprintln!("Invalid line: missing name"); continue; } }; let class = match tokens.next().and_then(|s| s.parse().ok()) { Some(num) => num, None => { eprintln!("Invalid line: missing or invalid class number"); continue; } }; // 这里可以使用解析后的变量 println!("ctype: {}, name: {}, class: {}", ctype, name, class); } Ok(()) }
关键细节说明
split_whitespace():按任意空白字符(空格、制表符、换行等)分割字符串,返回一个迭代器,和C++istringstream的>>行为一致。parse():将字符串转换为指定类型,返回Result,需要处理解析失败的情况(比如字符串无法转成整数)。- 迭代器
tokens的next()方法逐个取出令牌,和C++中依次读取的逻辑对应。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

