Достаточно простая задачка как для уже опытного в Rust программиста, так и для новичка, только щупающего язык. Имеет несколько вариантов решений, здесь напишу то, до чего додумался.
Как решил задачку
Взял строку и вызвал метод chars, преобразовав строку в итератор символов;
С помощью метода rev изменил порядок итератора;
Собрал итератор в коллекцию с помощью метода collect, дженериком преобразовал в строку (не стековый тип &str, а String).
О сложных символах Юникода (графемах)
По умолчанию Rust при таком решении сконвертирует графемы в их юникодовое представление (например \u1234). Эту проблему решил с помощью крейтаunicode-segmentation. Установил:
И заменил вызов chars на graphemes(true) (преобразование строки в итератор кластеров графем с опцией расширенных кластеров).
Конечный код:
// reverse-string/lib.rsuse unicode_segmentation::UnicodeSegmentation;pub fn reverse(input: &str) -> String { // Return iterator of chars, reverse iterator, turn it into collection and join in String type // input.chars().rev().collect::<String>() input.graphemes(true).rev().collect::<String>()}