You can get 1 character string[i..i+1], strings can't be indexed because multiple bytes may make up a single visual character and Rust doesn't want to make that decision. Another way is string.chars().nth(i)
If your string may contain multi-character grapheme clusters, then simply printing the chars in reverse may produce unexpected results.
For example, the string "man\u{0303}ana" displays as "mañana" forward, but s.chars().rev().collect() displays as "anãnam". (The tilde is now above the wrong letter.)
You can use the unicode-segmentation crate to iterate over graphemes instead of chars:
use unicode_segmentation::UnicodeSegmentation;
fn main() {
let x = "man\u{0303}ana";
let y: String = x.graphemes(true).rev().collect();
println!("{}", y); // prints "anañam"
}
Reversing a Unicode string "correctly" is my favorite impossible task. Ligatures like "ffi". Korean, where it seems like it'd make sense to reverse "letters" composing the blocks, but this wouldn't make sense to Korean speakers. Arbitrary sequences that make non-standard emoji with zero-width joiners. Flag emoji. And the wild ride of bi-directional text that's tricky to manage even in its normal direction(s).