Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ строки

Автор: vjtr 14.03.2008 15:21

нужно решить задачуЖ для слов заданной строки, которые содержат заданное ключевое слово,найти самое длинное слово. между словами, а так же в конце и начале строки может быть любое кол-во пробелов.
вот как я делала:

  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.

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

Автор: Айра 14.03.2008 21:14

Цитата
Заданное ключевое слово

т.е. если строка "аа абба авббва ", а ключевое слово "бб", то должно вывестись "авббва" ?

Автор: vjtr 14.03.2008 21:30

да так но у меня при вводе слов:
помирить мирный миры
самое длинное слово выдает:
мирный

Автор: volvo 14.03.2008 21:38

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 14.03.2008 23:42

спасибо большое у меня получилось