Rust 铁锈中的阿特巴什密码

Rust 铁锈中的阿特巴什密码,rust,Rust,因此,我正在研究一个Atbash Rust密码的实现——这是一个关于exercism.io的练习。我有点C语言的经验,我发现我的代码很迂回,有点折磨人。在Rust中执行str和字符串操作是我还没有真正摸索过的事情。在C语言中,这似乎占用更少的代码行 下面是我的代码——我是以正确的方式处理这个问题,还是遗漏了一些重要的概念或数据操作方法?这是否应该如此简单 该练习包括获取一个输入&str并输出一个字符串,每个字符按照atbash密码进行更改,每5个字符添加一个空格。还包括解码功能。所有这些都放在库

因此,我正在研究一个Atbash Rust密码的实现——这是一个关于exercism.io的练习。我有点C语言的经验,我发现我的代码很迂回,有点折磨人。在Rust中执行str和字符串操作是我还没有真正摸索过的事情。在C语言中,这似乎占用更少的代码行

下面是我的代码——我是以正确的方式处理这个问题,还是遗漏了一些重要的概念或数据操作方法?这是否应该如此简单

该练习包括获取一个输入
&str
并输出一个
字符串
,每个字符按照atbash密码进行更改,每5个字符添加一个空格。还包括
解码
功能。所有这些都放在
库中

// "Encipher" with the Atbash cipher.
pub fn encode(plain: &str) -> String {
    let mut coded: String = plain.to_string();

    coded.retain(|c| c.is_ascii_alphanumeric());
    coded.make_ascii_lowercase();

    let coded_no_spacing = String::from_utf8(
        coded
            .bytes()
            .map(|c| {
                if c.is_ascii_alphabetic() {
                    122 - c + 97
                } else {
                    c
                }
            })
            .collect(),
    )
    .unwrap();

    spacer(coded_no_spacing)
}

/// "Decipher" with the Atbash cipher.
pub fn decode(cipher: &str) -> String {
    let mut out = encode(cipher);
    out.retain(|c| c.is_ascii_alphanumeric());
    out
}

fn spacer(coded_no_spacing: String) -> String {
    let mut coded_no_spacing = coded_no_spacing.chars();

    let mut temp_char = coded_no_spacing.next();
    let mut counter = 0;
    let mut coded_with_spaces = "".to_string();
    while temp_char.is_some() {
        if counter % 5 == 0 && counter != 0 {
            coded_with_spaces.push(' ');
        }
        coded_with_spaces.push(temp_char.unwrap());
        temp_char = coded_no_spacing.next();
        counter += 1;
    }
    coded_with_spaces
}

所以,这是一个错误的地方张贴这种东西,但如果任何其他exercism的学生发现这与谷歌搜索,我想指出的是良好的建议,在users.rustlang.org


我发了一篇类似的帖子,那里的人也发了一些。

如果你的代码确实有效,那么这篇帖子可能更适合作为codereview.stackexchange.com或users.rust-lang.org发布;或者缩小到具体问题,如果没有。谢谢你的建议!在这里贴这个不合适吗?我是个新手,不确定stackoverflow的标准。我有没有办法删除这个问题?我已经把它标记为“基于意见”,希望主持人来决定。但是,是的,StackOverflow是一个询问是否有些东西没有按预期工作的地方。如果所有这些都有效,但你想知道它是否能做得更好,那么这个问题就离题了。就我个人而言,我建议去上一篇评论中提到的Rust论坛——根据我自己的经验,这样的问题在那里通常是受欢迎的。