Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2008, 13:33   #1
hooch
 
Регистрация: 22.11.2008
Сообщений: 3
По умолчанию Поиск одинаковых слов (Delphi 7)

Дан файл,содержащий текст на русском языке.Найти слова,встречающиеся в каждом предложении или сообщить,что таких слов нет.Помогите кто чем может.Очень надо.Спасибо заранее.
hooch вне форума Ответить с цитированием
Старый 22.11.2008, 13:54   #2
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Если необходимо найти слова, которые стречаются в КАЖДОМ предложении, то предлагаю примерно следующий алгоритм:
1. Загрузить файл в Memo (1 строка = 1 предложение).
2. Первое предложение забить полностью в массив - 1 элемент = 1 слово.
3. Пройтись циклом по остальному тексту, в цикле исп. функию pos.
4. Если слово не встретилось в очередном предложении - обнуляем (:= '') соответствующий элемент массива.
5. Смотрим что осталось в массиве, делаем вывод.
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.

Последний раз редактировалось VVM; 22.11.2008 в 13:57.
VVM вне форума Ответить с цитированием
Старый 22.11.2008, 20:42   #3
hooch
 
Регистрация: 22.11.2008
Сообщений: 3
По умолчанию

Я конечно благодарен,но если вам не очень сложно напишите кусочек кода...пожалуйста...мне просто курсовик сдават ьа я не понимаю этой темы ... заранее спасибо...
hooch вне форума Ответить с цитированием
Старый 23.11.2008, 13:15   #4
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Вот код. Полагаю, его можно оптимизировать, но мне лень =)
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    TotalStr, Res: string;
    List: TStringList;
    First: array of string; //первое предложение, 1 = слово;
    Other: array of string; //остальные предложения, 1 = предложение;
    function GetFirstSentence: integer; //возвращает первую точку
    procedure DistributeOtherSentences(From: integer);
    function Check: boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not OpenDialog1.Execute then
    exit;
  List := TStringList.Create;
  List.LoadFromFile(OpenDialog1.FileName);
  TotalStr := List.Text;
  List.Free;
  DistributeOtherSentences(GetFirstSentence);
  if Check then
    ShowMessage('Слово(а) "' + Res + '" встречается(ются) в каждом предложении.')
  else
    ShowMessage('Слов, которые встречаются в каждом предложении нет.');
end;

function TForm1.Check: boolean;
var
  I, J, count: integer;
begin
  Result := false;
  for I := 0 to High(First) do
  begin
    count := 0;
    for J := 0 to High(Other) do
    begin
      if pos(First[i], Other[J]) <> 0 then
        inc(count);
      if count = length(Other) then
      begin
        Res := Res + First[i] + ' ';
        Result := true;
      end;
    end;
  end;
end;

procedure TForm1.DistributeOtherSentences(From: integer);
var
  I, LastDot: integer;
begin
  I := From;
  LastDot := From;
  SetLength(Other, 0);
  repeat
    begin
      inc(i);
      if (TotalStr[i] = '.') then
      begin
        SetLength(Other, length(Other) + 1);
        Other[High(Other)] := trim(copy(TotalStr, LastDot + 2, I - LastDot));
        LastDot := I;
      end;
    end;
  until i = length(TotalStr);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Res := '';
end;

function TForm1.GetFirstSentence: integer;
var
  I, LastSpace: integer;
begin
  Result := 0;
  I := 0;
  LastSpace := 1;
  SetLength(First, 0);
  repeat
    begin
      inc(i);
      if (TotalStr[i] = ' ') or
         (TotalStr[i] = '.') then
      begin
        SetLength(First, length(First) + 1);
        First[High(First)] := trim(copy(TotalStr, LastSpace, I - LastSpace));
        LastSpace := I;
      end;
    end;
  until TotalStr[i] = '.';
  Result := i;
end;

end.
З.Ы. На форме должен быть OpenDialog и Button.
'.' - разделитель предложений, ' ' - разделитель слов.
Открываем только текстовые файлы (*.txt).
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.

Последний раз редактировалось VVM; 23.11.2008 в 13:17.
VVM вне форума Ответить с цитированием
Старый 27.11.2008, 20:14   #5
hooch
 
Регистрация: 22.11.2008
Сообщений: 3
По умолчанию

Благодарю...спасли от армии)
hooch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск одинаковых строк Demitriy Microsoft Office Excel 45 26.07.2010 08:50
ПОИСК ОДИНАКОВЫХ СЛОВ (не проходите мимо!) MAD Помощь студентам 12 24.12.2007 22:41
Поиск слов в тексте pleer Общие вопросы Delphi 5 23.09.2007 08:19
Поиск одинаковых строк в файле ATL Помощь студентам 13 02.05.2007 01:05