这个问题指的是稳定的 Rust 版本1.2.0
我只想遍历 CLI 应用程序标准输入中的字符。完全有可能将 readstdin的read_line方法放入一个临时String实例中,然后迭代它的chars()迭代器。
但我不喜欢这种方法,因为它分配了一个完全不必要的String对象。Stdintrait 的文档实现了Readtrait,它有 chars()迭代器,但它被标记为不稳定(因此不能与稳定的编译器版本一起使用)。
是否有另一种可能不太明显的方式来逐个字符地读取 stdin,而无需任何额外的 Rust 端缓冲?
您可以通过拥有一个单字节数组来实现这一点,并继续读取直到Result变成Err. 但是,这存在一个问题,因为如果您不以 ASCII 字符读取,则可能会出现这种情况。如果您要解决这个问题,最好只分配 aString并使用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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
示例输出:
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')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1937 次 |
| 最近记录: |