#text #utility #parser #no-std

no-std 原地字符串映射

一个原地字符串修改库

1 个不稳定版本

0.1.0 2021年5月21日

#208解析工具

MIT/Apache

21KB
138

原地字符串映射

有人说C在原地字符串修改方面比Rust更好。所以我创建了它。

use in_place_string_map::MapInPlace;

fn decode_percent(s: &mut str) -> &mut str {
    let mut m = MapInPlace::new(s);

    while let Some(c) = m.pop() {
        match c {
            '%' => {
                let num = m.pop_chars(2).expect("not enough chars");
                let n = u8::from_str_radix(num, 16).expect("invalid hex");
                m.push(n as char).expect("no more capacity");
            }
            _ => {
                m.push(c).expect("no more capacity");
            }
        }
    }

    m.into_mapped()
}

唯一需要注意的事情是不要推送比之前弹出的字节更多的字节。在这里这是可以的,因为%ff是2个字节长(最长可以是这样),但源文本使用了3个字节。当然,这样做并不不安全,你只是会失败推送。

有关其工作原理的更多详细信息可以在代码中找到(代码中有所注释)以及博客文章中。

错误/建议?

我在https://github.com/5225225/in-place-string-map上有一个仓库的镜像(这不是规范URL,它在https://git.5snb.club/5225225/in-place-string-map上的gitea托管)。请随意在github仓库中提出问题/拉取请求。或者,联系我(作者字段中的电子邮件,或阅读提交电子邮件)。

无运行时依赖