dan*_*ani 2 string type-conversion char rust
我试图将一个string(或str)数字存储12345到一个向量中,以便向量包含{1,2,3,4,5}.
正如我完全新生锈,我有同类型(的问题String,str,char,...),但还缺少有关转换的任何信息.
我当前的代码如下所示:
fn main() {
let text = "731671";
let mut v: Vec<i32>;
let mut d = text.chars();
for i in 0..text.len() {
v.push( d.next().to_digit(10) );
}
}
Run Code Online (Sandbox Code Playgroud)
你很亲密!
首先,索引循环for i in 0..text.len()不是必需的,因为无论如何你都要使用迭代器.直接在迭代器上循环更简单:for ch in text.chars().不仅如此,您的索引循环和字符迭代器可能会发散,因为len()返回字节数并chars()返回Unicode标量值.作为UTF-8,字符串的Unicode标量值可能少于字节数.
下一个障碍是to_digit(10)返回一个Option,告诉你该角色有可能不是一个数字.您可以检查是否to_digit(10)返回Some了Optionwith 的变体if let Some(digit) = ch.to_digit(10).
拼凑在一起,代码现在看起来像这样:
fn main() {
let text = "731671";
let mut v = Vec::new();
for ch in text.chars() {
if let Some(digit) = ch.to_digit(10) {
v.push(digit);
}
}
println!("{:?}", v);
}
Run Code Online (Sandbox Code Playgroud)
现在,这是相当迫切的:你正在制作一个矢量并逐个填充它,所有这些都是你自己.您可以通过对字符串应用转换来尝试更具声明性或功能性的方法:
fn main() {
let text = "731671";
let v: Vec<u32> = text.chars().flat_map(|ch| ch.to_digit(10)).collect();
println!("{:?}", v);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |