Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.03.2010, 13:14
nav nav вне форума
Прохожий
 
Регистрация: 27.11.2007
Сообщения: 30
Репутация: 10
Плохо поикс слова

Код:
{найти в тексте слова, которые начинаются и окончиваются на
одну букву и посчитать  их количество.
Например-дано:акула, машина, торт, акула
ответ:акула-2, торт-1}
procedure TForm1.Button1Click(Sender: TObject);
var BykvaEnd,BykvaHome:char; slovo:string;
    count:array[1..100] of integer; poisk,k,g:integer;
begin memo1.Color:=clred; memo2.Color:=clblue;
 memo1.Font.Color:=clwhite; memo2.Font.Color:=clyellow;
 slovo:=memo1.Lines.Text;  k:=1;
 BykvaHome:=slovo[1]; BykvaEnd:=slovo[length(slovo)];
 if BykvaEnd=' '
 then BykvaEnd:=slovo[length(slovo)-1] {пропускаю пробелы, иначе ищу слово}
 else if BykvaHome=BykvaEnd
      then begin poisk:=pos(slovo,memo1.Lines.Text);{ищу повтор слова}
                 count[k]:=count[k]+1 end
      else begin k:=k+1; slovo:=memo1.lines.Text end;
 for g=1 to k do memo2.Lines.Add(slovo+StrToint(count[g]))
end;{procedure}
может я зря memo2 ввёл? Прога совсем не идёт

Последний раз редактировалось nav, 28.03.2010 в 13:18.
Ответить с цитированием
  #2  
Старый 28.03.2010, 13:32
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Держи)
Для работы алгоритма, требуется мемо, листбокс и кнопка.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  cnts:array of integer;
  i,n:integer;
  w:String;
begin
  w:='';
  SetLength(cnts,0);
  with ListBox1.Items do
    begin
    ListBox1.Clear;
    BeginUpdate;
    for i:=1 to Length(Memo1.Text) do
      if Memo1.Text[i] in [' ',',','.',#10,#13] then
        begin
        if (Length(w)>1) and (w[1]=w[Length(w)]) then
          begin
          n:=IndexOf(w);
          if n <> -1 then cnts[n]:=cnts[n]+1
              else
                begin
                Add(w);
                SetLength(cnts,Length(cnts)+1);
                cnts[high(cnts)]:=1;
                end;
          end;
        w:='';
        end
          else w:=w+Memo1.Text[i];
    for i:=Low(cnts) to high(cnts) do
      Strings[i]:=Strings[i]+' : '+IntToStr(cnts[i]);
    SetLength(cnts,0);
    EndUpdate;
    end;
end;
Ответить с цитированием
  #3  
Старый 28.03.2010, 13:33
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Можно несколько попроще, если текст разбить по словам и слова запихать в TStringList, а там уже можно используя сортировку это сделать легко.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 29.03.2010, 13:18
nav nav вне форума
Прохожий
 
Регистрация: 27.11.2007
Сообщения: 30
Репутация: 10
По умолчанию

Цитата:
Сообщение от Asinkrit
Держи)
Для работы алгоритма, требуется мемо, листбокс и кнопка.
спасибо, сделал. Только у меня выдает акула-1, но это я сам подумаю.
P.S.А круто я тему написал: "поикс"? Буквы перепутал!
Ответить с цитированием
  #5  
Старый 29.03.2010, 13:37
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

У меня он выдавал, как ты просил, смотри в чем ошибся..
Ответить с цитированием
  #6  
Старый 29.03.2010, 13:59
nav nav вне форума
Прохожий
 
Регистрация: 27.11.2007
Сообщения: 30
Репутация: 10
По умолчанию

Цитата:
Сообщение от Asinkrit
У меня он выдавал, как ты просил, смотри в чем ошибся..
хорошо, разберусь
Ответить с цитированием
  #7  
Старый 30.03.2010, 15:23
Аватар для iliasmalorum02
iliasmalorum02 iliasmalorum02 вне форума
Прохожий
 
Регистрация: 31.10.2009
Сообщения: 29
Репутация: -31
По умолчанию

Цитата:
Сообщение от Страдалецъ
Можно несколько попроще, если текст разбить по словам и слова запихать в TStringList, а там уже можно используя сортировку это сделать легко.
А и не надо ничего на слова разбивать! Просто перебираем строку как массив, и как только пробел найден, сравниваем букву после этого пробела с буквой перед первой после текущего пробела запятой.
__________________
Делаю программы за очки репутации!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:12.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter