Георги качи първо решение на 18.10.2017 23:29 (преди около 8 години)
Задачата ти е 15/15, добра работа :). Не съм учуден, разбира се, ти си от ветераните.
Ако искаш да пробваш интересна вариация на задачата -- опитай да имплементираш sentence_endings без да алокираш динамична памет във вектор. Би могъл да си направиш custom итератор за целта. Моят опит замества целия метод с това:
fn sentence_endings(&self) -> SentenceIterator {
SentenceIterator { chars: self.string.chars(), in_sentence: false }
}
Имплементацията на SentenceIterator е това, с което можеш да си поиграеш. Разбира се, може и по различен начин да пробваш, просто давам идея в случай, че ти е скучно :). Имай предвид, че ще трябва мъничко да поръсиш тук и там lifetimes, за да може Chars тип да се запази като поле в SentenceIterator. Ако не ти се рови в момента (или не искаш да се spoil-ваш :)), може да почакаш да стигнем дотам в лекциите.
Мерси, ще си поиграя с итераторите :)
В интерес на истината, като писах sentence_endings много ми се искаше да yield-на нещо, но доколкото разбирам няма coroutine-и в rust. Колко идиоматично е в Rust да се прави итератор vs да се връща вектор? Бих предположил, че първото се среща по-често, но пък е повече усилие за имплементиране, поне на пръв поглед.

Метода с експлицитен
filterработи супер. Друго нещо, което би могъл да използваш конкретно в случая с низове, еmatchesметода на&str: https://doc.rust-lang.org/std/primitive.str.html#method.matches.Конкретния метод би се заместил със
self.string.matches(char::is_alphabetic).count()Я, този метод съм го пропуснал :) Мерси!