对于我正在做的Exercism练习(minesweeper任务),我需要将usize
转换为char
,以便将其插入std::string::String
。
要用最少的代码行描述问题:
let mut s = String::from(" ");
let mine_count: usize = 5; // This is returned from a method and will be a value between 1 and 8.
s.insert(0, _______); // So I get: "5 " at the underscores I do:
我目前的做法是:
mine_count.to_string().chars().nth(0).unwrap(); // For example: '2'
或者看看full example in the Rust playground。不知何故,这让我觉得不太优雅。
我也试过:
mine_count as char; // Where mine_count is of type u8
然而,当把mine_count
加到std::string::String
上时,它会变成--例如--\u{2}
,而不是简单的'2'
:
let mine_count: u8 = 8;
s.insert(0, mine_count as char);
println!("{:?}", s);
输出:
"\u{8} "
复制here。
是否有其他方法可以实现将1..8范围内的整数转换为单个字符(char
)的目标?
4条答案
按热度按时间ckx4rj1h1#
我建议将
char::from_digit
与使用它所需的转换(as u32
)一起使用:7dl7o3gd2#
然而,当把
mine_count
加到一个std::string::String
上时,它会变成--例如--\u{2}
,而不是简单的'2'
。这就是包含标量值
2
的char
与包含实际字符'2'
的char
之间的区别。并且不描绘可见的东西。在此上下文中使其显示为\u{2}
的原因是您将字符串打印为debug formatting({:?}
)。如果您尝试以一般格式打印相同的字串:输出将包含不打算打印的内容,因此可能会显示占位符字符或根本不显示(可重现here)。
为了将一位数字表示为相应的字符:(1)首先通过可恢复的错误或硬Assert来确保
mine_count
在预期的限制内。(2)然后,通过将其转换为数字字符域来转换该数。Playground
sy5wg1nm3#
是否有其他方法可以实现将1..8范围内的整数转换为单个字符的目标
使用查阅表格:
v1uwarro4#
让我们这样做吧: