/// 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{}
*/