Страница 1 из 1
Задача с текстовым файлом
Добавлено: 27 апр 2009, 14:38
PetrovVasya
Добрый день, помогите с алгоритмом. вот задача:
Дан текстовый файл. Длина строк произвольна. Слова в строках отделены друг от друга одним или несколькими пробелами. Длина слова не более 100 символов. подсчитать количество слов в файле, состоящих только из русских букв(больших и маленьких). Спасибо
Re: Задача с текстовым файлом
Добавлено: 27 апр 2009, 19:17
Naeel Maqsudov
Однопроходный алгоритм.
Код: Выделить всё
Определяем флаг: Rus = true
Счетчик длины слова. L=0
И счетчик слов W=0
Добавляем к строке терминальный пробел (чтобы избавить алгоритм от "особых" условий на границе строки).
Дальше пробегаем по строке в цикле и для каждого i-го символа проверяем:{
Если пробел, то {
если (Rus) and (L>0), то W=W+1
обнуляем счетчик длины (L=0)
Rus=true
} иначе {
Rus = Rus AND (буква является русской) //проверяем принадлежность
//символа к русским буквам и если нет,то Rus становится false
}
}
По завершении цикла W - количество "русских" слов.
Флаг Rus становится false для слов, в которых есть хоть одна буква, не принадлежащая мноржеству русских букв. В результате такое слово не будет посчитано.
Если несколько пробелов идут подряд, то L=0 и такое "пустое" слово тоде не будет посчитано.
Re: Задача с текстовым файлом
Добавлено: 30 апр 2009, 01:23
disappear
Реализация нужна?
Re: Задача с текстовым файлом
Добавлено: 02 май 2009, 12:39
PetrovVasya
как то не очень получается у меня, на паскале пишу, так что не помешает

Re: Задача с текстовым файлом
Добавлено: 02 май 2009, 22:59
Naeel Maqsudov
Так, то что я написал не подходит?
Re: Задача с текстовым файлом
Добавлено: 04 май 2009, 23:21
disappear
PetrovVasya писал(а):как то не очень получается у меня, на паскале пишу, так что не помешает
Ну, у меня не совсем на паскале, а на java

но зато в нескольких вариантах, втч реализация алгоритма предложенного Naeel (он, кстати, самый эффективный по времени). Все работает, протестировано на примерах и изобилует комментариями. Так что если жаба устроит - скину.