Как изменить порядок букв в ржавчине с помощью свопа? - PullRequest
0 голосов
/ 08 мая 2020

Мне нужно изменить порядок каждого слова в предложении. У меня есть строка разделителей, чтобы разделить мой код на слова, и функция swap(0,1), чтобы изменить порядок букв в слове. Однако мне нужно пропускать первую и последнюю букву в каждом слове, и я не могу использовать для этих целей регулярные выражения. Вот какой-то код:

const SEPARATORS: &str = " ,;:!?./%*$=+)@_-('\"&1234567890\r\n";

fn main() {
    dbg!(mix("According, research"));
}

fn mix(s: &str) -> String {
    let mut a: Vec<char> = s.chars().collect();

    for group in a.split_mut(|num| SEPARATORS.contains(*num)) {
        group.chunks_exact_mut(2).for_each(|x| x.swap(0, 1));
    }

    a.iter().collect()
}

Вывод следующий:

[src/main.rs:4] mix("According, research") = "cAocdrnig, eresrahc"

Но мне нужен следующий вывод:

[src/main.rs:4] mix("According, research") = "Accroidng, rseaerch"

Кто-то знает, как это исправить?

1 Ответ

1 голос
/ 08 мая 2020

Все, что вам нужно, это использовать фрагмент, в котором нет первого и последнего символа, используя group[1..len-2]:

const SEPARATORS: &str = " ,;:!?./%*$=+)@_-('\"&1234567890\r\n";

fn main() {
    dbg!(mix("According, research"));
}

fn mix(s: &str) -> String {
    let mut a: Vec<char> = s.chars().collect();

    for group in a.split_mut(|num| SEPARATORS.contains(*num)) {
        let len = group.len();

        if len > 2 {
            group[1..len-2].chunks_exact_mut(2).for_each(|x| x.swap(0, 1));
        }
    }

    a.iter().collect()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...