Выявить во введённом тексте слова. напечатать и подсчитать те из них, которые начинаются с заданной приставки. Значение приставки вводить с клавиатуры. Слова в предложении отделяются пробелом.
Код проги:
Program vubor_slov;
uses crt;
Var st1,sl,sl2,sl3:string[200]; pr:string[100];
k,i:integer;
Begin
clrscr;
textcolor(10);
writeln(' введите несколько слов');
readln(st1); writeln;
textcolor(11);
writeln(' введите приставку');
readln(pr);writeln;
sl2:=' ';
for i:=1 to length(st1) do
if st1[length(st1)]<>' ' then insert(sl2,st1,length(st1)+1);
for i:=1 to length(st1) do
if copy(st1,i,length(pr))=pr then begin
k:=pos(' ',st1);
sl:=copy(st1,i,k);
sl3:=copy(st1,i,length(sl));
textcolor(14);
writeln('подходящие слова ',sl3)
end;
readln
End.
Проблема в том, что прога некорректно работает если приставка встречается в середине слова.
Как сделать так, чтоб приставка проверялась только вначале слова?
4 мая 2008 в 23:00
ааа, вот оно что)
4 мая 2008 в 22:04
А в хелпе почитать?
в LPos хранится индекс первого пробельного символа
4 мая 2008 в 22:00
возвращает "Lpos" значение "1" в пробеле.
так?
4 мая 2008 в 21:05
а "Lpos" за что отвечает?
4 мая 2008 в 21:05
LPos := Pos(' ', LWords);
Угадай с трех раз
4 мая 2008 в 21:04
Проверяет найден ли в слове пробел.
Вообще говоря правильнее заменить на конструкцию
repeat
…….
until LPos = 0
но я привык работать с while
4 мая 2008 в 21:03
А что делает
LRes := '';
__LPos := 1;
__while LPos <> 0 do begin
4 мая 2008 в 21:02
Работает! УРА! Спасибо!
Блин как долго я мучался с этой задачкой…
Спасибо Антон!
4 мая 2008 в 21:01
Как не работает?
Входные данные и полученные результаты в студию
4 мая 2008 в 21:01
Да, правильно. Вместо
Delete(LWords, 1, LPos);
нужно
Delete(LWords, 1, LPos – 1);
4 мая 2008 в 21:00
не работает….
4 мая 2008 в 20:05
var
__LPrefix, LWords, LRes: String;
__LPos, LLen: Integer;
begin
__writeln('enter some words: ');
__readln(LWords);
__writeln('enter prefix: ');
__readln(LPrefix);
__LWords := ' ' + LWords + ' ';
__LRes := '';
__LPos := 1;
__while LPos <> 0 do begin
____LLen := Length(LWords);
____while (LPos <= LLen) and (LWords[LPos] = ' ') do
______Inc(LPos);
____if LPos <= LLen then begin
______Delete(LWords, 1, LPos);
______LPos := Pos(' ', LWords);
______if Pos(LPrefix, LWords) = 1 then
________LRes := LRes + Copy(LWords, 1, LPos – 1) + ' ';
____end else
______LPos := 0;
__end;
__writeln('matching words: ', LRes);
end
4 мая 2008 в 12:04
блин, так и не получается до сих пор(
2 мая 2008 в 18:05
тогда вообще слов не находти(
2 мая 2008 в 18:04
sl:=sl+copy(st1,i,k-i+1);
2 мая 2008 в 18:02
чё-то всё равно нето(
во-первых последнее слово выводитдва раза
во-вторых прога не работает с длинными словами
пример
yyyyyyyyyfgjhgfjh dyhdtfghtrh yyyyyyyyyyyyfhgfh
yyy
2 мая 2008 в 17:05
Она некорректно работала не только в средине слова )
Program vubor_slov;
Var st1,sl:string[200]; pr:string[100];
k,i:integer;
Begin
writeln('enter some words: ');
readln(st1);
writeln;
writeln('enter prefix: ');
readln(pr);
writeln;
if st1[length(st1)] <> ' ' then st1:=st1+' ';
sl:='';
i:=1;
while i <= length(st1) do begin
if ((i=1) or (st1[i-1]=' ')) and (copy(st1,i,length(pr))=pr) then begin
k:=pos(' ',st1);
sl:=sl+copy(st1,i,k);
delete(st1, 1, k);
i:=1;
end else inc(i);
end;
writeln('matching words: ', sl);
readln
End.