привет всем.
помогите пожалуйста понять строковый тип данных (точнее разделение элементов внутри строки на слова )
Основная задача программы звучит так "Ввести текст. Удалить из текста все слова, содержащие букву «я»".
К сожалению мой вариант не делает это полностью (лишь удаляет саму букву а не слово с ней ) .
Заранее благодарен :)
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.
Другие языки программирования и технологии
Как сделать программу которая при вводе текста, удаляет из текста все слова, содержащие букву «я». (PascalABC)
решение на 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.
Пользуйся
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.
Пользуйся
Есс-но. У Вас алгоритм не подходит под решение задачи.
цикл пока не конец строки
пропускаем_разделители (пробел, запятые и т. д. и т. п.)
запоминаем_позицию
пропускаем_буквы
проверяем_последнюю_букву_я
если совпало - удаляем с запомненной позиции до текущей
конец цикла.
Попробуйте сами. Решение целиком не привожу - тем более оно было-бы через ToWords и прочие фишки .NET, а Вы похоже можете решить сами. Если проблемы - пишите в комменты.
цикл пока не конец строки
пропускаем_разделители (пробел, запятые и т. д. и т. п.)
запоминаем_позицию
пропускаем_буквы
проверяем_последнюю_букву_я
если совпало - удаляем с запомненной позиции до текущей
конец цикла.
Попробуйте сами. Решение целиком не привожу - тем более оно было-бы через ToWords и прочие фишки .NET, а Вы похоже можете решить сами. Если проблемы - пишите в комменты.
Нужно разбить текст на массив из слов и затем создать новый текст, исключая слова с ненужной буквой.
эх студенты! Скоро закончите свою специальность, а в жизни Паскалем пользоваться уже не будете. Им сейчас вообще не пользуются. Желаю удачи с окончанием колледжа
Похожие вопросы
- C# Сделать программу которая разделяет текст на предложения.
- Как на паскале написать код программы,которая при вводе числа,выводит его словами?
- Нужна функция на php которая будет считывать текст из файла и выводить слова которые начинаются и заканчиваются на "а"
- Недавно начал изучать программирование с паскаля.Помогите сделать программу которой я ввел бы 3 числа или больше а она
- Как сделать программу в pascalABC которая бы считала количество определённых слов в тексте?
- Написать программу на Visual BasicВ каждом слове текста замените "а" на букву "е", если "а" стоит начетном месте, и заме
- Проблема с вводом текста в фотошопе!
- Написать программу в VBA:определить во введенном тексте количество слов,начинающиеся с заданной буквы.
- С++.Почему программа зацикливается после ввода Х
- как на JavaScript или вообще сделать так чтобы в тексте(слове) одна буква была другого цвета?