Удалить слова соседние с указанным номером

10001011

С клавиатуры вводится текст и вводится цифра. Надо удалить слова соседние с этой указанной цифрой Помогите пожалуйста)
11 ответов

10001011

Вот ввел я строку Мама мыла раму и цифру 9. Что удалять?


10001011

Puporev, Должно получится просто «Мама»


10001011

Вы зря вопите. Пока не появится точное и полное условие задачи как в оригинале, а не этот бред, Вам никто не поможет.


10001011

С клавиатуры вводится текст и вводится цифра. Надо удалить слова соседние с этой указанной цифрой Например Вводим «мама мыла раму» и цифру 2 Вывод «мыла» Помогите пожалуйста!!! Буду очень благодарен.


10001011

uses crt;
var s:string;
    i,j,n,k,i1,l1,i2,l2:byte;
begin
clrscr;
repeat
writeln('Введите не менее трех слов, разделенных пробелами');
readln(s);
s:=' '+s; {добавим пробел в начало для удобства}
{посчитаем количество слов}
k:=0;
for i:=1 to length(s) do
if(s[i]<>' ')and(s[i-1]=' ') then k:=k+1;
if k<3 then writeln('Введен меньше 3 слов, повторите ввод');
until k>2;
repeat
write('Введите номер слова соседи которого будут удалены от 2 до ',k-1,' n=');
readln(n);
until n in [2..k-1];
k:=0; {считаем слова в строке}
for i:=1 to length(s) do
if(s[i]<>' ')and(s[i-1]=' ') then
 begin
  k:=k+1;
  if k=n-1 then {если перед заданным}
   begin
    j:=i;
    i1:=i;{его начало}
    l1:=1; {посчитаем его длину}
    while s[j]<>' ' do
     begin
      l1:=l1+1;
      j:=j+1;
     end;
   end
  else if k=n+1 then {если за заданным}
   begin
    j:=i;
    i2:=i;
    l2:=1;
    while (j<=length(s))and(s[j]<>' ') do
     begin
      l2:=l2+1;
      j:=j+1;
     end;
  end;
end;
delete(s,i2,l2); {удалим за}
delete(s,i1,l1);{удалим перед}
delete(s,1,1);{удалим первый пробел}
write(s);
readln
end.


10001011

Спасибо большое!


10001011

А какую проверку и где надо сделать чтобы удалять пробелы ? К примеру
Вводим «утром    мама мыла раму»
Цифру 3 И чтобы вывод был через один пробел «утром мыла»


10001011

Можно удалить все лишние пробелы так
while pos('  ',s)>0 do delete(s,pos('  ',s),1);//в апострофах по 2 пробела
write(s);


10001011

Тогда есть баг Если ввести «мама мыла раму днём» (между словами больше двух пробелов) И цифру 3 То выведет «мамараму» (вместе)


10001011

Значит вы неправильно написали
while pos(' *',s)>0 do delete(s,pos(' *',s),1);//в апострофах по 2 пробела
Я же написал в апострофах по 2 пробела


10001011

Тю В одном только поставил два пробела Спасибо большое !