相关疑难解决方法(0)

如何从 Rust 中的 stdin 读取的行中删除换行符和回车符?

我想从 stdin 读取一行并将其存储在字符串变量中,并将字符串值解析为 u32 整数值。read_line() 方法读取 2 个额外的 UTF-8 值,这会导致 parse 方法崩溃。

以下是我尝试删除回车符和换行符的内容:

use std::io;
use std::str;

fn main() {
    let mut input = String::new();
    match io::stdin().read_line(&mut input) {
        Ok(n) => {
            println!("{:?}", input.as_bytes());
            println!("{}", str::from_utf8(&input.as_bytes()[0..n-2]).unwrap());
        }
        Err(e) => {
            println!("{:?}", e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在 Rust 中执行此操作最惯用的方法是什么?

newline stdio utf-8 carriage-return rust

6
推荐指数
1
解决办法
6250
查看次数

Rust中用于编程竞赛的最快的惯用I / O例程?

我的问题已得到部分回答,因此我对它进行了修改,以回应从评论和其他实验中学到的知识。

总而言之,我想要一个用于编程比赛的快速I / O例程,在该例程中,一个文件即可解决问题,而无需外部包装。它应从BufRead(标准输入或文件)空白序列中读取标记。标记可以是整数,浮点数或ASCII词,用空格和换行符分隔,因此看来我应该FromStr一般支持类型。少数问题是交互式的,这意味着一开始并不是所有输入都可用,但是总会出现完整的问题。

对于上下文,这是导致我在此处发布的讨论。有人编写了非常快速的自定义代码,以直接从的&[u8]输出中解析整数BufRead::fill_buf(),但在中不是通用的FromStr

到目前为止,这是我最好的解决方案(强调Scanner结构):

use std::io::{self, prelude::*};

fn solve<B: BufRead, W: Write>(mut scan: Scanner<B>, mut w: W) {
    let n = scan.token();
    let mut a = Vec::with_capacity(n);
    let mut b = Vec::with_capacity(n);
    for _ in 0..n {
        a.push(scan.token::<i64>());
        b.push(scan.token::<i64>());
    }
    let mut order: Vec<_> = (0..n).collect();
    order.sort_by_key(|&i| b[i] - a[i]);
    let ans: i64 = order
        .into_iter()
        .enumerate()
        .map(|(i, x)| a[x] * …
Run Code Online (Sandbox Code Playgroud)

string optimization parsing rust

5
推荐指数
1
解决办法
211
查看次数

如何从控制台有效地读取一行用户输入?

我最近学习了如何使用ioRust文档读取输入,但有没有" 简单 "的方法来读取控制台输入?我的根源是大量挖掘C++,所以从控制台获取输入就像这样简单std::cin >> var.但在Rust,我正在做:

for line in io::stdin().lines() {
    print!("{}", line.unwrap());
    break;
}
Run Code Online (Sandbox Code Playgroud)

这会读取一次输入,但for循环似乎是一种非常笨拙的方法来实现这一点.我怎么能轻松做到这一点?

rust

2
推荐指数
3
解决办法
7218
查看次数

使用scan读取u8时"宏未定义"!()

我在读取如何读取Rust 1.0中用户的整数输入中的读取整数输入?,但我注意到所有解决方案首先将一个字符串作为输入,然后将其转换为整数.我想知道是否有办法直接读取整数.

这个页面提到了scan!()宏,但由于某些原因,当我使用编译以下程序时它似乎没有运行rustc main.rc.

extern crate text_io;

fn main() {
    let mut a: u8;
    let mut b: u8;
    scan!("{},{}", a, b);
    print!("{} {}", a, b);
}
Run Code Online (Sandbox Code Playgroud)

这会产生错误:

error: macro undefined: 'scan!'
    scan!("{},{}",a,b);
Run Code Online (Sandbox Code Playgroud)

input rust

2
推荐指数
1
解决办法
97
查看次数

Rust:无法将整数解析为字符串,ParseIntError

我刚开始尝试 Rust,所以我实现了 Book 的“猜谜游戏”的修改版本。每次我尝试输入数字时,程序都无法从字符串解析整数:

Guess the number!
Input your guess:
50
You guessed 50
 (4 bytes)!
thread 'main' panicked at 'Wrong number format!: ParseIntError { kind: InvalidDigit }', src\libcore\result.rs:997:5
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
error: process didn't exit successfully: `target\release\experiment.exe` (exit code: 101)
Run Code Online (Sandbox Code Playgroud)

下面应用了代码。

我已经尝试过其他整数类型。

use std::io;
use rand::Rng;

fn main() {
    println!("Guess the number!\nInput your guess:");

    let mut guess = String::new();

    let secnum = rand::thread_rng().gen_range(1,101);

    'br: loop { 
        match io::stdin().read_line(&mut guess) {
            Ok(okay) => …
Run Code Online (Sandbox Code Playgroud)

string integer rust

2
推荐指数
1
解决办法
2365
查看次数