生成随机字母和固定数字组合

Cab*_*ero 3 random rust

我需要生成一个单个字母和6位组合的随机序列,例如: F841257

我正在寻找rand箱子,但有些东西不太合适.

extern crate rand;

fn main() {
    println!("{:?}", rand::random::<char>());
}
Run Code Online (Sandbox Code Playgroud)

打印类似的东西'\u{6ae02}'println!("{}", rand::random::<char>());产生一些奇怪的字形.

有人能指出我如何实现这一目标的正确方向吗?

Vla*_*eev 8

一,工作计划:

extern crate rand;

use rand::Rng;

fn main() {
    let mut rng = rand::thread_rng();
    let letter: char = rng.gen_range(b'A', b'Z') as char;
    let number: u32 = rng.gen_range(0, 999999);
    let s = format!("{}{:06}", letter, number);
    println!("{}", s);
}
Run Code Online (Sandbox Code Playgroud)

接下来,解释一下.

rand::random::<char>()从整个char范围返回一个随机值,也就是说,它可以返回任意Unicode代码点.这就是为什么你看到奇怪的字形 - 这些可能是来自上层Unicode平面的值.

您需要定义生成所需内容的边界.首先,你需要一个字母,然后你需要六位数字.字母是'A'和'Z'之间的任何字符,六位数字可以用0到999999之间的数字表示,打印时用零填充.

因此,首先,我们生成一个u8对应于ASCII中的字母并将其转换为char(不幸的是,randcrate不为chars 提供范围分布,因此我们必须使用这种间接).

其次,我们生成u32介于0和999999之间.

然后我们以所需的格式打印它们.以下是该程序生成的一些值:V285490,Y865809,A704620.