Другие языки программирования и технологии

Как сделать программу которая при вводе текста, удаляет из текста все слова, содержащие букву «я». (PascalABC)

привет всем.
помогите пожалуйста понять строковый тип данных (точнее разделение элементов внутри строки на слова )
Основная задача программы звучит так "Ввести текст. Удалить из текста все слова, содержащие букву «я»".
К сожалению мой вариант не делает это полностью (лишь удаляет саму букву а не слово с ней ) .
Заранее благодарен :)
Program strok;
Uses
crt;
Var
i:integer;
st:string; //строка }
s:char; //буква }

BEGIN
writeln('Введите строку слов:');
readln(st);
write('Введите букву: ');
readln(s);

repeat
i:=pos(s,st); //ищем слово с буквой s
inc(i); //пробел не считаем
if i<>1 then //если слово нашли то
repeat //цикл
write(st[i]); //напечатать букву найденного слова
delete(st,i,1); //удалить эту букву
until if(st[i]=' ')or(i=length(st)) t //если слово кончилось то конец цикла}
writeln;
until i=1; {если больше нет найденных слов то КОНЕЦ ЦИКЛА!!!! }

writeln('st=',st);
END.
решение на Turbo Pascal 7.0

Program stroka555;
Uses crt;
Var a, i, j, k, startpos, finishpos, y: integer;
stroka, stroka1: string;
s: char;

BEGIN
{writeln('input stroka:');
readln(stroka);
write('input bukvu: ');
readln(s);
stroka:='0hjz jjkjkjjz dfgdfgsdfz dfsdfsdfsdfsdfz zgx 1khv 2sds 3fgd zxs zz z 4dfg zx ffgz 5fdf zxzx 6vbn zx zoxz zxz';
s:='z';}
clrscr;
stroka:='Моряк якорем царапал плохие слова: Косяк, яблоко, Дед Мороз, я свободен, кегля, ясень';
s:='я';
writeln (stroka);
{for i:=1 to length (stroka) do if stroka[i] = s then write (i:3);}
a:=length(stroka);
writeln;
{writeln (' Длина строки =',a);}
startpos:=0;
finishpos:=a;
for y:=1 to 2 do {цикл на проверку рядом стоящих букв в разных словах, например: петля яблоко}
for i:=1 to a do
begin
if stroka[i] = s then
begin
if i=1 then startpos:=1
else
for j:=i downto 1 do
if stroka[j]=' ' then
begin
startpos:=j+1;
break;
end;
for k:=i+1 to a do
if stroka[k]=' ' then
begin
finishpos:=k;
break;
end;
delete (stroka, startpos, finishpos-startpos);
end;
end;
writeln;
writeln(stroka);
readln;
END.

Пользуйся
Федор Битков
Федор Битков
24 309
Лучший ответ
Есс-но. У Вас алгоритм не подходит под решение задачи.

цикл пока не конец строки
пропускаем_разделители (пробел, запятые и т. д. и т. п.)
запоминаем_позицию
пропускаем_буквы
проверяем_последнюю_букву_я
если совпало - удаляем с запомненной позиции до текущей
конец цикла.

Попробуйте сами. Решение целиком не привожу - тем более оно было-бы через ToWords и прочие фишки .NET, а Вы похоже можете решить сами. Если проблемы - пишите в комменты.
Нужно разбить текст на массив из слов и затем создать новый текст, исключая слова с ненужной буквой.
Денис Маленков
Денис Маленков
83 844
эх студенты! Скоро закончите свою специальность, а в жизни Паскалем пользоваться уже не будете. Им сейчас вообще не пользуются. Желаю удачи с окончанием колледжа
Сергей Франц
Сергей Франц
1 879

Похожие вопросы