Преобразовать данную строку, удалив из неё три слова наименьшей длины.
Слова могут разделяться только пробелами. Для строк использовать только 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) dobeginwhilenot (s[k] in lim) and (k <= length(s)) dobeginif 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;
repeatfor i := 2to n1 dobeginif length ( slovo (s1, i)) < min thenbegin
min := length (slovo (s1, i))
{ ??????????????}
volvo
7.01.2007 18:31
Основа будет выглядеть так:
...
s1 := '123 1234567 12 12345 123456 123 12 123456';
for kol := 1to3dobegin
min := 255; n1 := 1;
while slovo ( s1, n1, start ) <> ''dobeginif min > length(slovo(s1, n1, start)) thenbegin
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) dobeginwhilenot (s[k] in lim) and (k <= length(s)) dobeginif c = n thenbeginif start = 0then 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;
beginif (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 (посмотри на заголовок функции - поймешь, что к чему)...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.