Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2017, 14:02   #1
Jimmik27
Новичок
Джуниор
 
Регистрация: 12.05.2017
Сообщений: 3
По умолчанию Помогите доделать код: Удалить из строки S последнюю подстроку, совпадающую с S0

Пожалуйста помогите доделать код
Код работает, но не правильно
Он удаляет совпадающие строки в начале, а мне надо чтобы удалил в конце.

Конкретный пример: если в этом коде(код ниже) в окно вывода ввести
S: abc abc abcd abc
S0: abc
то получим abc abcd abc
А нужно чтобы при вводе
abc abc abcd abc
выводило
abc abc abcd

Задание: Даны строки S и S0. Удалить из строки S последнюю подстроку, совпадающую с S0. Если совпадающих подстрока нет, то вывести строку S без изменений.

Вот мой код:
Код:
program string34;

var
  s, s0: string;
  i, d: integer;

begin
  write('S:');
  Readln(s);
  write('s0:');
  Readln(s0);
  for i := 1 to Length(s0) do 
    d := pos(S0, S);
  if d <> 0 then delete(S, d, length(S0));
  Writeln(S);
end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 12.05.2017 в 14:07.
Jimmik27 вне форума Ответить с цитированием
Старый 12.05.2017, 14:12   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

а так?
Код:
i:=Length(S)+1-lenS0;
k:=0;
lenS0:=Length(S0);
while (i>0) and (k=0) do
  if Copy(S,i,lenS0)=S0 then k:=i else Dec(i);
if k>0 then Delete(S, k, LenS0);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2017, 14:24   #3
Jimmik27
Новичок
Джуниор
 
Регистрация: 12.05.2017
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а так?
Код:
i:=Length(S)+1-lenS0;
k:=0;
lenS0:=Length(S0);
while (i>0) and (k=0) do
  if Copy(S,i,lenS0)=S0 then k:=i else Dec(i);
if k>0 then Delete(S, k, LenS0);
Так получается код? если так, то выдает ошибку

Код:
program string34;

var
  s, s0: string;
  i, d, k: integer;

begin
  write('S:');
  Readln(s);
  write('s0:');
  Readln(s0);
  for i:=Length(S)+1-length(S0);
  k:=0;
  while (i>0) and (k=0) do
  if Copy(S,i,length(S0))=S0 then k:=i else Dec(i);
  if k>0 then Delete(S, k, Length(S0));
  
  Writeln(S);
end.
Jimmik27 вне форума Ответить с цитированием
Старый 12.05.2017, 14:30   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Jimmik27 Посмотреть сообщение
Так получается код?
нет!

так:
Код:
program string34;

var
  s, s0: string;
  i, k: integer;

begin
  write('S:');
  Readln(s);
  write('s0:');
  Readln(s0);
  k:=0;
  i:=Length(S)+1-length(S0);
  while (i>0) and (k=0) do
      if Copy(S,i,length(S0))=S0 then k:=i else Dec(i);

  if k>0 then Delete(S, k, Length(S0));
  
  Writeln(S);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2017, 14:34   #5
Jimmik27
Новичок
Джуниор
 
Регистрация: 12.05.2017
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
нет!

так:
Код:
program string34;

var
  s, s0: string;
  i, k: integer;

begin
  write('S:');
  Readln(s);
  write('s0:');
  Readln(s0);
  k:=0;
  i:=Length(S)+1-length(S0);
  while (i>0) and (k=0) do
      if Copy(S,i,length(S0))=S0 then k:=i else Dec(i);

  if k>0 then Delete(S, k, Length(S0));
  
  Writeln(S);
end.
Работает! Спасибо
Jimmik27 вне форума Ответить с цитированием
Старый 12.05.2017, 14:49   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Jimmik27 Посмотреть сообщение
Работает! Спасибо
Пожалуйста.

Если вопросы по коду есть - задавайте.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить подстроку из строки с++ Voxa7 Помощь студентам 0 09.11.2011 20:34
Помогите доделать код на Си osichev Общие вопросы C/C++ 0 08.06.2009 20:39
удалить подстроку в VBA AnnNet Помощь студентам 1 19.01.2009 16:59
Удалить из строки S1 первую, последнюю, все подстроки совпадающие с S2 ТРОЯН=) Паскаль, Turbo Pascal, PascalABC.NET 1 10.12.2008 23:28
Как удалить из строки подстроку по маске ? - fenix - Помощь студентам 4 23.04.2008 15:04