Rust中生成指定位置字符不同的字符串的惯用实现方法
更简洁的Rust实现:生成指定位置字符不同的字符串
这里有几种比双循环更简洁优雅的实现方式,按需选择:
运行时场景(最直观写法)
利用str::repeat配合format!直接拼接,代码可读性拉满:
let n = 5; let c = 2; let s = format!("{}O{}", "X".repeat(c), "X".repeat(n - c - 1)); // 结果:"XXOX"(当n=5,c=2时)
迭代器风格写法
用迭代器链式调用,适合偏好函数式风格的场景:
let n = 5; let c = 2; let s: String = std::iter::repeat('X') .take(c) .chain(std::iter::once('O')) .chain(std::iter::repeat('X').take(n - c - 1)) .collect();
编译期常量场景
如果字符串长度和目标位置都是编译期常量,可以用const fn或者宏实现,完全在编译阶段生成结果:
用const fn(Rust 1.59+)
const fn generate_string<const N: usize>(pos: usize) -> [u8; N] { let mut arr = [b'X'; N]; // 确保位置不越界 if pos < N { arr[pos] = b'O'; } arr } // 编译期生成字符串 const MY_STRING: &str = core::str::from_utf8(&generate_string::<5>(2)).unwrap();
用宏实现
macro_rules! gen_special_string { ($len:expr, $pos:expr) => {{ let mut bytes = [b'X'; $len]; if $pos < $len { bytes[$pos] = b'O'; } core::str::from_utf8(&bytes).unwrap() }}; } const MY_STRING: &str = gen_special_string!(5, 2);
内容的提问来源于stack exchange,提问作者totheendoftheworld
相关产品推荐
相关产品推荐

