gpt4 book ai didi

arrays - 如何在 Rust 中将一串数字转换为数组或整数向量?

转载 作者:行者123 更新时间:2023-11-29 07:43:26 26 4
gpt4 key购买 nike

我在 STDIN 上写了一串数字(例如 4 10 30 232312),我想读取它并转换为整数数组(或向量),但我不能找不到正确的方法。到目前为止,我有:

use std::io;

fn main() {
let mut reader = io::stdin();
let numbers = reader.read_line().unwrap();
}

最佳答案

你可以这样做:

use std::io::{self, BufRead};                   // (a)

fn main() {
let reader = io::stdin();
let numbers: Vec<i32> =
reader.lock() // (0)
.lines().next().unwrap().unwrap() // (1)
.split(' ').map(|s| s.trim()) // (2)
.filter(|s| !s.is_empty()) // (3)
.map(|s| s.parse().unwrap()) // (4)
.collect(); // (5)
println!("{:?}", numbers);
}

首先,我们锁定标准输入,让您可以将标准输入用作缓冲读取器。默认情况下,Rust 中的标准输入是无缓冲的;你需要调用lock()方法来获取它的缓冲版本,但这个缓冲版本是程序中所有线程的唯一版本,因此对它的访问应该是同步的。

接下来,我们读下一行(1);我正在使用 lines() next() 的迭代器方法返回 Option<io::Result<String>> , 因此只获得 String你需要unwrap()两次。

然后我们将它按空格拆分并从额外的空格中修剪结果 block (2),删除修剪后留下的空 block (3),将字符串转换为 i32 s (4) 并将结果收集到向量 (5)。

我们还需要导入std::io::BufRead特征 (a) 为了使用 lines()方法。

如果您事先知道输入的数字之间不会包含超过一个空格,则可以省略步骤 (3) 并移动 trim()从 (2) 调用 (1):

let numbers: Vec<i32> = 
reader.lock()
.lines().next().unwrap().unwrap()
.trim().split(' ')
.map(|s| s.parse().unwrap())
.collect();

Rust 还提供了一种将字符串拆分为一系列以空格分隔的单词的方法,称为 split_whitespace() :

let numbers: Vec<i32> =
reader.read_line().unwrap().as_slice()
.split_whitespace()
.map(|s| s.parse().unwrap())
.collect()

split_whitespace()实际上只是 split() 的组合和 filter() ,就像我原来的例子一样。它使用 split()函数参数 checks for different kinds of whitespace, not only space characters .

关于arrays - 如何在 Rust 中将一串数字转换为数组或整数向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com