задача 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;
// 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];