нужно найти самое короткое слово в первом предложении, которого нет во втором предложении.
а также в обоих предложениях удалить символ # и удвоить символ +.
подскажите хотя бы,с чего начать.
Пусть 1 предложение - первая строка , а вторая строка - второе предложение.
Начни с того, что разбей строки на слова.
Как это сделать - возьми любой алгоритм http://forum.pascal.net.ru/index.php?showtopic=6972 или http://forum.pascal.net.ru/index.php?s=&showtopic=2361&view=findpost&p=28157
Если не нравяться те алгоритмы, можешь взять мою программу - http://forum.pascal.net.ru/index.php?s=&showtopic=4844&view=findpost&p=39711
Далее, имея масив (или список) слов, работаешь с ними.
а вот по второй части задания.
попробовала сделать так:
//убирает #
procedure RemoveSharp (var S: string);
var i, len: integer;
begin
i:=1;
len:=Length(S);
while i <= len do begin
if S[i] = '#' then begin
delete(S, i, 1);
dec(len);
end;
inc(i);
end;
end;
// удваивает +
procedure DuplicatePlus(var S: string);
var i, Len: ineger;
begin
i:=1;
len:=Length(S);
while i <= len do begin
if S[i] = '+' then begin
insert('+', S, i);
inc(i);
inc(len);
end;
inc(i);
end;
end;
Дык можно короче ...
while pos('#', s) <> 0 do delete(s, pos('#', s), 1);
Я,знаю, но Pos будет много раз просматривать строку, а я за 1 проход убиваю все '#' - мы ведь не что-то вроде substr ищем.
объясните,пожалуйста,в чем проблема
Вероятно программа разбивает на слова строки p1 и p2 а потом находит самое короткое слово из p1.
А вообще-то написан откровенный бред.
Воробще-то нужно для начала написать, что за задание или, то, что вы ожидаете от программы - ТАКОЙ код никто смотреть просто не станет.
задание в самом начале темы.
мне нужно найти в первом предложении самое короткое слово,которого нет во втором.
еще вот такой недоработанный вариант выделения искомого слова
помогите,пожалуйста,
никак не плучается выделить такое слово
Проверяй ...
uses crt;
type
TWords = array[1..40] of string;
function GetWords(s : string; var w : TWords) : byte;
const
limits = [#0..#32,'.',',',':',';','!','?','"'];
var
i,back,n : byte;
begin
i := 1;
n := 0;
while(i<=length(s)) do begin
while(i<=length(s)) and (s[i] in limits) do
inc(i);
if i<=length(s) then begin
back := i;
while(i<=length(s)) and not(s[i] in limits) do
inc(i);
inc(n);
w[n] := copy(s, back, i-back);
end;
end;
GetWords := n;
end;
function Find(w1, w2 : TWords; n1, n2 : byte) : string;
var
i, j, k, nmin : byte;
begin
// удаляем из первого массива слова, которые есть во втором
i := 1;
while (i <= n1) do begin
j := 1;
while (j <= n2) and (w1[i] <> w2[j]) do inc(j);
if j <= n2 then begin
for k := i to pred(n1) do w1[k] := w1[succ(k)];
dec(n1);
end
else inc(i);
end;
nmin := 0;
if n1 > 0 then begin
nmin := 1;
for i := 2 to n1 do
if w1[i] < w1[nmin] then nmin := i;
end;
if nmin > 0 then Find := w1[nmin] else Find := '';
end;
var
s1, s2 : string;
w1, w2 : TWords;
n1, n2 : byte;
begin
clrscr;
s1 := 'I love pascal, but hate fortran.';
s2 := 'I love pascal, and hate fortran too.';
n1 := GetWords(s1, w1);
n2 := GetWords(s2, w2);
writeln(Find(w1, w2, n1, n2));
readln;
end.
спасибо большое.
а если слов минимальной длины несколько?
я попробовала выводить слова минимальной длины,но выводится только последнее.
в чем ошибка?
if n1 > 0 then begin
nmin := 1;
for i := 2 to n1 do
if w1[i] < w1[nmin] then begin
nmin := i;
writeln(w1[nmin]); { <---- }
end;
end;