Приветствую Вас Гость | RSS

Delphi заготовки

Воскресенье, 12.05.2024, 11:54
Главная » 2012 » Апрель » 11 » Решение задач на строки. примеры функций
15:18
Решение задач на строки. примеры функций
задача
1.найти самую короткую группу нулей в строке
2.подсчитать количество символов в самой длинной группе,в строке,состоящей из групп нулей и едениц
3.подсчитать количество едениц,в группах с нечетным количеством символов
4.вывести на экран числа строки,состоящей из произвольных десятичных цифр
5.вывести на экран,четные числа строки
6.вывести на экран порядковый номер слова максимальной длинны
7.подсчитать количество символов в самой короткой группе,в строке,состоящей из групп нулей и едениц
8.вывести на экран порядковый номер слова,минимальной длинны
9.заменить в каждом слове первую букву на прописную
10.поменять местами первую и последнюю букву в каждом слове
11.вывести на экран только строчные латинские буквы
12.удалить первую букву каждого слова
13.вывести на экран нечетные числа строки
14.вывести на экран только прописные латинские буквы
15.вывести на экран самую короткую группу едениц в строке
16.удалить последнюю букву кажого слова



type
 endWord  = set of  #0..#255;

var
  bkend:endWord;



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 GetMaxLengthWord(s:string):string;
var l,x:integer;
    MaxL:integer;
    s2:string;
begin
  l:=GetWordCount(s); // кол-во слов
  if l>0 then begin
   result:=GetSlovoIndex(s,1);
   MaxL:=length(result);
   for x:=1 to l do begin
   s2:=GetSlovoIndex(s,x);
    if MaxL<length(s2) then begin
     result:=s2;
     MaxL:=length(s2);
    end;
   end;
   end;
end;

Function GetMinLengthWord(s:string):string;
var l,x:integer;
    MinL:integer;
    s2:string;
begin
  l:=GetWordCount(s,3); // кол-во слов
  if l>0 then begin
   result:=GetSlovoIndex(s,1,3);
   MinL:=length(result);
   for x:=1 to l do begin
   s2:=GetSlovoIndex(s,x,3);
    if MinL>length(s2) then begin
     result:=s2;
     MinL:=length(s2);
    end;
   end;
   end;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
Showmessage('Всего слов '+Inttostr(GetWordCount(form1.Memo1.Lines.Text)));
Showmessage('Слово номер 161 "'+GetSlovoIndex(form1.Memo1.Lines.Text,1)+'"');
Showmessage('Слово мак. длины "'+GetMaxLengthWord(form1.Memo1.Lines.Text)+'"');
Showmessage('Слово мин. длины "'+GetMinLengthWord(form1.Memo1.Lines.Text)+'"');

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
bkend:=[#146,#91,#93,#40,#41,#123,#125,#58,#44,#150,#151,#133,#33,
                      #46,#45,#145,#146,#147,#148,#171,#187,#39,#59,#47,#47,#32,
                      #183,#38,#64,#42,#92,#149,#94,#169,#164,#134,#135,#176,
                      #35,#185,#37,#137,#182,#174,#167,#126,#153,#95,#124,#166,'0','1','2','3','4','5','6','7','8','9'];
end;

Просмотров: 2634 | Добавил: NetSoftWare | Рейтинг: 0.0/0
Всего комментариев: 1
1 NetSoftWare  
0
исправил функцию определения кол-ва слов

// GetWordCount - определяет кол-во слов в строке S
// S-строка
// Len ограничения на длину слова если 0 то ограничения нет
// пример если Len равен 3 то кол-во слов длина которых больше или ровна 3

Function GetWordCount(s:string;len:integer):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 [#146,#91,#93,#40,#41,#123,#125,#58,#44,#150,#151,#133,#33,
#46,#45,#145,#146,#147,#148,#171,#187,#39,#59,#47,#47,#32,
#183,#38,#64,#42,#92,#149,#94,#169,#164,#134,#135,#176,
#35,#185,#37,#137,#182,#174,#167,#126,#153,#95,#124,#166,'0','1','2','3','4','5','6','7','8','9'])
// или число
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;

Имя *:
Email *:
Код *: