Как перемешать вектор за исключением первого и последнего элементов без использования сторонних библиотек? - PullRequest
0 голосов
/ 03 мая 2020

У меня есть задача перетасовать слова, но первая и последняя буква каждого слова должна быть неизменной. Когда я пытаюсь использовать filter(), он не работает должным образом.

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

fn main() {
    print!("MAIN:{:?}", mix("Evening,morning"));
}

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

    for group in a.split_mut(|num| SEPARATORS.contains(*num)) {
        if group.len() > 4 {
            let k = group.first().unwrap().clone();
            let c = group[group.len() - 1].clone();
            group
                .chunks_exact_mut(2)
                .filter(|x| x != &[k])
                .for_each(|x| x.swap(0, 1))
        }
    }

    let s: String = a.iter().collect();
    s
}

1 Ответ

0 голосов
/ 04 мая 2020

Это то, что вы ищете?

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

    for words in a.split_mut(|num| SEPARATORS.contains(*num)) {
        if words.len() > 4 {
            let initial_letter = words.first().unwrap().clone();
            let last_letter = words[words.len() - 1].clone();
            words[0] = last_letter;
            words[words.len() - 1] = initial_letter;
        }
    }
    let s: String = a.iter().collect();
    s
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...