Помощь - Поиск - Пользователи - Календарь
Полная версия: строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
vjtr
нужно решить задачуЖ для слов заданной строки, которые содержат заданное ключевое слово,найти самое длинное слово. между словами, а так же в конце и начале строки может быть любое кол-во пробелов.
вот как я делала:
  Program Zplata;
uses wincrt;
var w,f:array [1..10] of string;
str,kl:string;
i,p,k,j,m,nom,b,h:integer; s:array [1..98] of integer;
begin
writeln('ââåäè str=');
readln(str);
write('ki=');
readln(kl);
str:=str+' ';
k:=0;
while str<>'' do begin
p:=pos(' ',str);
if p>1 then begin
k:=k+1;
w[k]:=copy(str,1,p-1);
end;
delete(str,1,p);
end; b:=length(kl);
for i:=1 to k do begin

for j:=1 to b do
if (w[i][j]=kl[j]) and
( w[i][j+1]=kl[j+1]) then begin f[i]:=w[i];

s[i]:=length(f[i]);
if m<s[i] then begin m:=s[i]; nom:=i;end; end; end;
writeln(f[nom]);
end.

но у меня выводится не так как надо
подправте пожалуйста!!!
Айра
Цитата
Заданное ключевое слово

т.е. если строка "аа абба авббва ", а ключевое слово "бб", то должно вывестись "авббва" ?
vjtr
да так но у меня при вводе слов:
помирить мирный миры
самое длинное слово выдает:
мирный
volvo
vjtr, не забывай, что
Цитата
между словами, а так же в конце и начале строки может быть любое кол-во пробелов
, и их надо тоже удалять, не только обработанное слово:
Цитата
        while str<>'' do begin
while (str <> '') and (str[1] = ' ') do delete(str, 1, 1); { <--- Добавляем }
p:=pos(' ',str);
if p>1 then begin
k:=k+1;
w[k]:=copy(str,1,p-1);
end;
delete(str,1,p);
end;
Ну, а после цикла тебе надо просто пройти по всем элементам массива W, и проверить, если есть вхождение KL (лучше с использованием Pos, а не по одной букве), то сравнивать длины слов... Хотя я бы сделал вообще все в одном цикле, и проверку на наличие KL, и проверку длины...
vjtr
спасибо большое у меня получилось
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.