Rust中如何将字符串转为字符数组并提取指定字符生成新字符串?
问题解决:Rust中字符数组无法使用join的问题
你代码里的核心问题是:[mono[0], mono[1]]是固定大小的char数组,Rust标准库并没有为这种类型实现join方法。join方法通常针对的是能生成可拼接字符串的迭代器集合,比如Vec<&str>或Vec<String>。
直接解决方案
最简单的方式是用format!宏直接拼接字符,不需要用到join:
use std::io; fn main() { println!("Enter P1:"); let mut mono = String::new(); io::stdin() .read_line(&mut mono) .expect("Failed to read line"); // 先去掉输入中的换行符和前后空白,避免读取到多余的换行字符 let mono: Vec<char> = mono.trim().chars().collect(); // 检查长度,防止输入不足两个字符导致panic if mono.len() >= 2 { let x = format!("{}{}", mono[0], mono[1]); println!("Square 1: {x}"); } else { println!("请输入至少两个字符"); } }
如果你坚持想用join
需要先把每个char转换成String,再收集成Vec后调用join:
let x = [mono[0], mono[1]] .iter() .map(|c| c.to_string()) .collect::<Vec<String>>() .join("");
额外建议
read_line会把用户输入的换行符(\n)也读取到字符串里,所以一定要用trim()去掉前后空白,否则可能会把换行符当成有效字符处理。- 直接通过索引访问
mono[0]、mono[1]会在输入字符不足时触发panic,所以必须先检查数组长度。
内容的提问来源于stack exchange,提问作者Coston Pritchett
相关产品推荐
相关产品推荐

