You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:57:14