![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() нужна помощь по вот какому элементарному вопросу: посчитать количество слов и пробелов в тексте.
Прочитал пример в котором необходимо было подсчитать количество наиболее встречаемых слов в тексте и вывести их в %-ном соотношении, но так и не понял как это переделать под свою задачу. подскажите пожалуйста и если можно с примером решения. заранее благодарен |
#2
|
||||
|
||||
![]() ничего сложного в этом нет. если считать словами любые символы, не считая пробелов, то задача решается итерационным использованием функции Pos, пока она не станет равной -1. если слова могут разделяться некоторыми символами, то лучше анализировать текст посимвольно, используя 3 счетчика-для количества слов, для пробелов и для длины слова, обнуляющийся при достижении символа-разделителя. например
Код:
var c, i, j, k : integer; str:string; const del: set of char = [',', '.']; // символы-разделители ... begin i:=0; // пробелы j:=0; // слова k:=0; // длина слова for c:=1 to length(str)do // в str лежит нужный текст begin if (str[c] in del)then // если символ - разделитель if k>0 then // если перед символом было слово begin inc(j); // добавляем слово k:=0; // и обнуляем счетчик его длины end else else // если другой символ begin if (str[c]=' ')then // если пробел begin if k>0 then // если перед пробелом было слово inc(j); // добавляем слово inc(i); // добавляем пробел k:=0; // обнуляем счетчик длины слова end else // если обычная буква inc(k); // увеличиваем счетчик длины слова end; end; // дальше надо просто вывести содержимое i и j end; РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت |
#3
|
|||
|
|||
![]() ага, т.е. мы сначала удалили ненужные знаки.....ясненько
![]() а так можно вывести?? правда выводит ответы 0 и 0 Edit1.Text:=inttostr(i); Edit2.Text:=inttostr(j); спасибо огромное!!!! Последний раз редактировалось sokol, 21.12.2008 в 01:37. |
#4
|
||||
|
||||
![]() вообще-то мы ничего не удаляем.
выводить ответы как раз так и надо. а переменной str присвоено значение? и еще: если текст в несколько строчек, то в набор del надо добавить символы #13 и #10. а если текст лежит в memo, то код будет как этот Код:
var c,l, i, j, k : integer; const del: set of char = [',', '.', '<', '>', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '+', '=', '`', '~', '/', '?', '''', '"', ':', ';', '\', '|', '№', '[', ']', '{', '}']; // разнообразные символы-разделители ... begin i:=0; // пробелы j:=0; // слова k:=0; // длина слова for l:= 0 to Memo1.Lines.Count-1 do // обрабатываем построчно for c:=1 to length(Memo1.Lines.Strings[l]) do // считаем в l-той строке begin if (Memo1.Lines.Strings[l][c] in del)then // если символ - разделитель if k>0 then // если перед символом было слово begin inc(j); // добавляем слово k:=0; // и обнуляем счетчик его длины end else else // если другой символ begin if (Memo1.Lines.Strings[l][c]=' ')then // если пробел begin if k>0 then // если перед пробелом было слово inc(j); // добавляем слово inc(i); // добавляем пробел k:=0; // обнуляем счетчик длины слова end else // если обычная буква inc(k); // увеличиваем счетчик длины слова end; end; Edit1.text:=inttostr(i); Edit2.text:=inttostr(j); end; еще можно проверять принадлежность символа не к разделителю, а к обычной букве. РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت |
#5
|
|||
|
|||
![]() теперь всё работает
![]() спасибо еще раз, очень выручил!! |