首页 > 解决方案 > 有没有办法在 Rust 中为字符添加偏移量?

问题描述

我来自 C/C++ 背景,其中 ASCII 字节很容易偏移:

char my_new_char = 'a' + some_offset;

据我了解,Rust 使用 UTF-8 作为其char/ &str/ String,因此并非所有范围都可以使用偏移量。但是,以这种方式偏移对于 ASCII 范围内的字符应该仍然可行,对吗?UTF-8 为重叠范围镜像 ASCII。

我正在查看文档/四处搜索,但找不到抵消的方法。这在 Rust 中可能吗?

标签: stringrustcharacterascii

解决方案


你可以使用这样的东西:

fn f(c: char, n: i8) -> char {
    debug_assert!(c.is_ascii_alphanumeric());
    let ret = ((c as i8) + n) as u8 as char;
    debug_assert!(ret.is_ascii_alphanumeric());
    ret
}

这允许正负偏移,并确保输入和输出都在[a-zA-Z0-9]范围内(这通常是您在这种情况下想要的)。


推荐阅读