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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2012, 20:10   #1
MONSTER152
 
Регистрация: 04.03.2012
Сообщений: 9
По умолчанию задачи на обработку строк (delphi)

помогите пожалуйста решить задачи на языке(delphi)


1.Задана строка. Определить, содержаться ли в строке цифры и знаки препинания.
2.В предложение возможны повторы слов. Удалить эти повторы.
MONSTER152 вне форума Ответить с цитированием
Старый 22.04.2012, 20:21   #2
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

Код:
function LowerCaseRus(const S: string): string;
var
  Ch: Char;
  L: Integer;
  Source, Dest: PChar;
begin
  L := Length(S);
  SetLength(Result, L);
  Source := Pointer(S);
  Dest := Pointer(Result);
  while L <> 0 do
  begin
    Ch := Source^;
    if (Ch >= 'A') and (Ch <= 'Z') then Inc(Ch, 32);
    if (Ch >= 'А') and (Ch <= 'Я') then Inc(Ch, 32); // Добавляем Рус буквы
    Dest^ := Ch;
    Inc(Source);
    Inc(Dest);
    Dec(L);
  end;
end;

  // возвращает позицию слова INDEX

Function GetPosIndex(s:string;index:integer;len:integer=0):Tpoint;
var y,x:integer;
    s2:string;
begin
  y:=0;
  s2:='';
  result.X:=1;
  result.y:=0;
  for X:=1 to length(s) do begin
if (ord(s[x])<33) or (s[x] in bkend) or (x=length(s)) then
                       begin
                       if (s2<>'') and ((len=0) or (length(s2)>=len))  then begin
                             y:=y+1;
                             if y=index then begin
                               result.y:=x-result.X;
                               exit;
                             end
                             end;
                             s2:='';
                          end
                          else begin
                          if s2='' then result.X:=x; // запоминаем позицию начала слова
                          s2:=s2+s[x]; // копируем слово

                          end;


  end;

end;

// получить слово номер
Function GetSlovoIndex(s:string;index:integer;len:integer=0):string;
var pr:Tpoint;
begin
    pr:=GetPosIndex(s,index,len);
    if pr.X>0 then
    if pr.y>0 then result:=copy(s,pr.x,pr.y);

end;



Function GetWordCount(s:string;len:integer=0):integer;
 var y,x:integer;
    s2:string;
begin
  y:=0;
  s2:='';
  result:=0;
  for X:=1 to length(s) do begin
    if (ord(s[x])<33) or (s[x] in bkend) or (x=length(s)) then
                       begin
                       if (s2<>'') and ((len=0) or (length(s2)>=len)) then begin
                             y:=y+1;
                             end;
                             s2:='';
                          end else s2:=s2+s[x];

  end;
  result:=y;
end;


 // удалить дубли
Function GeTTextFromNotDoubleWord(TextValue:string):string;
var
    WordList:array of string; // список уникальных слов
    WordListCount:integer; // кол-во уникальных слов

    Function AddWord(s:string):boolean; // проверяет список слов // если слово не найдено Добавляет слово в список
    // вовзращает true если слово новое false если слово уже было в списке
    var x:Integer;
    begin
      result:=true;
      for x:=0 to WordListCount-1 do
        if WordList[x]=s then begin
         result:=false;
         break; // если мы нашли слово то просто выходим
         end;

      if result then begin
        WordListCount:=WordListCount+1;
        Setlength(WordList,WordListCount);
        WordList[WordListCount-1]:=s;
      end;
    end;

    var lenText:integer; // кол-во слов
    x:Integer;// переменная
    Word:string; // слово
    WordPos:Tpoint; // позиция слова в тексте
    NewText:string;      //  полученный текст
begin
  WordListCount:=0;
  newText:=TextValue;
  lentext:=GetWordCount(newText); // получаем кол-во слов в тексте
  x:=1;
  while x<lentext do begin
  WordPos:=GetPosIndex(newText,x);
  Word:=copy(newText,WordPos.x,WordPos.y);
   if not AddWord(LowerCaseRus(Word)) then begin
      delete(newText,WordPos.x,WordPos.y); // удаляем слово
      lentext:=lentext-1; // уменьшаем кол-во слов на 1
      x:=x-1; //
   end;
  x:=x+1;
  end;
 result:=newText;
 WordListCount:=0; // очищаем список слов
 SetLength(WordList,WordListCount);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

bkend:=[' ',',','.','-','!','?',':',';',')','(','[',']'];



end;

{Procedure InitForWin_ANSI1251Litle;
begin
  WordDelimiters := [' ',',','.','-','!','?',':',';',')','(','[',']'];
end;
}


ваша процедура
Код:
GeTTextFromNotDoubleWord
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype

Последний раз редактировалось denisbrain; 22.04.2012 в 20:26.
denisbrain вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи на Дельфи: одна на обработку матрицы и две на обработку строк ali-4ka Помощь студентам 6 21.03.2012 14:28
задачи на обработку строк (delphi) MONSTER152 Помощь студентам 8 20.03.2012 19:48
Задачи на обработку строк mr.brain Паскаль, Turbo Pascal, PascalABC.NET 5 25.02.2012 22:12
Задачи на обработку строк Katia_Vasilyeva Паскаль, Turbo Pascal, PascalABC.NET 16 29.11.2011 04:20
задачи: на двумерные массивы,обработку строк,обработку текстовых файлов. (Паскаль) Yaro Помощь студентам 2 12.11.2009 12:55