Выглядит слишком по сишному, вместо count можно получить длину строки с помощью функции len, матч не нужен, можно с помощью ифа сделать
Разберись и итераторами и пользуйся ими вместо своих велосипедов
Несколько подсказок: chars это DoubleEndedIterator, есть полезная функция https://doc.rust-lang.org/nightly/std/primitive.char.html#method.len_utf8. Ну и наконец из &str можно получить срез
Со срезом есть нюанс: емнип, индексы при получении среза - это байты, а не чары, поэтому можно получить невалидный utf8-символ. Ну и не стоит забывать про разницу между character и grapheme cluster, и под понятие "символ" больше подходит последнее.
Для этого и нужен https://doc.rust-lang.org/nightly/std/primitive.char.html#method.len_utf8. Чтобы получить валидный срез. Берёшь первый и последний char и используешь что то вроде first_char.len_utf8()..(str.len() - last_char.len_utf8())
Печалит только, что получение last_char это O(n), но что поделать :)
Почему "не"?
Не за компом, я бы проверил что строка не пустая а затем (&s[max(1, s.length - 1)..(s.length - 1)]).to_string()
а какое здесь лучшее решение из тех что на скрине?
Все плохие. Первые три некорректно будут работать с не-ASCII символами. Последнее - хоть и корректное, но читается сложно.
let mut chars = s.chars(); chars.next(); chars.next_back(); chars.as_str().to_owned()
Черт, даже не знал что есть метод as_str 😅
Обсуждают сегодня