How to reverse a string without affecting special characters in Rust

1 Answer

0 votes
/// Reverses only alphabetic characters in a string.
/// Special characters remain at their original positions.
///
/// Example:
/// Input : "ab*#cde!@$,fg{}"
/// Output: "gf*#edc!@$,ba{}"
fn reverse_letters_keep_special(input: &str) -> String {
    // Collect all alphabetic characters and reverse them.
    let mut letters: Vec<char> = input
        .chars()
        .filter(|c| c.is_alphabetic())
        .collect();

    letters.reverse();

    let mut letter_index = 0;

    // Build the result string.
    input
        .chars()
        .map(|c| {
            if c.is_alphabetic() {
                let ch = letters[letter_index];
                letter_index += 1;
                ch
            } else {
                // Keep special characters in place.
                c
            }
        })
        .collect()
}

fn main() {
    let input = "ab*#cde!@$,fg{}";

    let result = reverse_letters_keep_special(input);

    println!("Input : {}", input);
    println!("Output: {}", result);
}


/*
run:

Input : ab*#cde!@$,fg{}
Output: gf*#edc!@$,ba{}

*/

 



answered 2 days ago by avibootz

Related questions

...