gpt4 book ai didi

string - 是否可以在不逐行缓存输入的情况下从 `io::stdin()` 读取字符?

转载 作者:行者123 更新时间:2023-11-29 08:03:14 24 4
gpt4 key购买 nike

这个问题指的是稳定的 Rust 版本 1.2.0

我只想遍历 CLI 应用程序标准输入中的字符。读取 stdinread_line 是完全可能的方法放入临时 String 实例,然后迭代它的 chars() 迭代器。

但我不喜欢这种方法,因为它分配了一个完全不必要的 String 对象。 Stdin trait 的文档实现了 Read trait,which has chars() 迭代器,但它被标记为不稳定(因此不能与稳定的编译器版本一起使用)。

是否有替代的、可能不太明显的方法来逐个字符地读取标准输入,而无需任何额外的 Rust 端缓冲?

最佳答案

您可以通过使用单个字节数组并继续读取直到 Result 变为 Err 来完成此操作。但是,这有一个问题,因为如果您不阅读 ASCII 字符,就会出现这种情况。如果您要解决这个问题,最好只分配一个 String,并使用 chars 迭代器,因为它可以处理这个问题。

示例代码:

use std::io::{stdin, Read};

fn main() {
loop {
let mut character = [0];
while let Ok(_) = stdin().read(&mut character) {
println!("CHAR {:?}", character[0] as char);
}
}
}

示例输出:

Hello World
CHAR Some('H')
CHAR Some('e')
CHAR Some('l')
CHAR Some('l')
CHAR Some('o')
CHAR Some(' ')
CHAR Some('W')
CHAR Some('o')
CHAR Some('r')
CHAR Some('l')
CHAR Some('d')
CHAR Some('\n')
你好世界
CHAR Some('\u{e4}')
CHAR Some('\u{bd}')
CHAR Some('\u{a0}')
CHAR Some('\u{e5}')
CHAR Some('\u{a5}')
CHAR Some('\u{bd}')
CHAR Some('\u{e4}')
CHAR Some('\u{b8}')
CHAR Some('\u{96}')
CHAR Some('\u{e7}')
CHAR Some('\u{95}')
CHAR Some('\u{8c}')
CHAR Some('\n')

关于string - 是否可以在不逐行缓存输入的情况下从 `io::stdin()` 读取字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32549784/

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