Преобразовать данную строку, удалив из неё три слова наименьшей длины.
Слова могут разделяться только пробелами. Для строк использовать только length, chr, ord.
Вопрос такой: как задать условие, чтобы избавиться именно от трёх слов наименьшей длины и как такие слова искать?
Lapp
7.01.2007 17:07
Цитата(18192123 @ 7.01.2007 13:59)
как задать условие, чтобы избавиться именно от трёх слов наименьшей длины и как такие слова искать?
Найти слово наменьшей длины. Удалить его. Повторить с начала еще два раза.
А для поиска придется пройтись по всем словам, запомниная их длину и начало, а также параллельно отыскивая минимальное.
Не совсем ясно выразился: пройтись по строке, отслеживая длину и начало минимального слова.
18192123
7.01.2007 18:07
вот всё , что смогла... однако так и не поняла про длину 3-х наименьших...
uses crt; function Slovo ( s : string; n :integer ) : string; const lim = [' ', ',', '!'] ; var ss : string; k, c, i : integer; begin ss := ''; c := 1; k := 1; while k <= length(s) do begin while not (s[k] in lim) and (k <= length(s)) do begin if c = n then ss: =ss + s[k]; inc (k); end; inc ( c ); while (s[k] in lim) and (k <= length(s)) do inc (k); end; Slovo := ss; end;
var s1, s2 : string; n1, min, i, kol : integer;
begin clrscr; writeln ( ' vvedite stroky' ); readln ( s1 ); n1 := 1; while slovo ( s1, n1 ) <> '' do inc ( n1 ); min := length (slovo ( s1, i )); kol := 0; repeat for i := 2 to n1 do begin if length ( slovo (s1, i)) < min then begin min := length (slovo (s1, i))
{ ??????????????}
volvo
7.01.2007 18:31
Основа будет выглядеть так:
... s1 := '123 1234567 12 12345 123456 123 12 123456'; for kol := 1 to 3 do begin min := 255; n1 := 1; while slovo ( s1, n1, start ) <> '' do begin if min > length(slovo(s1, n1, start)) then begin i := start; min := length(slovo(s1, n1, start)); end; inc(n1); end;
delete(s1, i, min); end; writeln(s1); ...
Правда, придется немного подкорректировать функцию Slovo, чтобы она возвращала еще и позицию начала текущего слова в строке:
function Slovo(s: string; n: integer; var start: integer): string; const lim = [' ', ',', '!'] ; var ss: string; k, c, i: integer; begin start := 0; ss := ''; c := 1; k := 1; while k <= length(s) do begin while not (s[k] in lim) and (k <= length(s)) do begin if c = n then begin if start = 0 then start := k; ss:=ss + s[k]; end; inc(k); end; inc( c );
while (s[k] in lim) and (k <= length(s)) do inc (k); end; Slovo := ss; end;
Использована не стандартная Delete, взята отсюда: Строки
18192123
7.01.2007 19:36
procedure _Delete(var s: String; start, len: Word); var i: Integer; begin
if (start <= 0) or (start >= 255) or (len <= 0) then exit;
if start + len - 1 > Length(s) then len := Length(s) - start + 1;
for i := start to Length(s) - len do s[i] := s[i + len];
dec(s[0], len);
end;
Объясните пожалуйста, что значит
dec(s[0], len);
и что такое len.
volvo
7.01.2007 19:47
dec(s[0], len);
- уменьшить длину строки на Len, а само по себе Len - это параметр, передаваемый в функцию, и показывающий, сколько символов надо удалить, начиная с позиции Start (посмотри на заголовок функции - поймешь, что к чему)...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.