You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:43:34