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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2012, 12:57   #1
avizer
Пользователь
 
Регистрация: 20.03.2012
Сообщений: 10
По умолчанию Дана строки S и S1. Каждое вхождение S1 в строку S в качестве подстроки заменить на обращенную подстроку S1 ( на Pascal )

Всем привет! Почти сделал лабу, не могу решить последнюю задачу, помогите:
Дана строка S и S1. Каждое вхождение S1 в строку S в качестве подстроки заменить на обращенную подстроку S1.


_________
Название темы должно адекватно отражать суть решаемой задачи/проблемы.
На первый раз я исправил.
В дальнейшем темы с подобным названием будут закрываться/удаляться,
а автор такой темы получать штрафы.

Прошу учесть на будущее...

Модератор.

Последний раз редактировалось Serge_Bliznykov; 20.03.2012 в 13:48.
avizer вне форума Ответить с цитированием
Старый 20.03.2012, 13:01   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

ну так в чём проблема?

1. обращаете строку для замены
2. проверяете в цикле исходную строку на соответствие искомой
3. если вхождение, то заменяете
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 20.03.2012, 13:06   #3
avizer
Пользователь
 
Регистрация: 20.03.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
ну так в чём проблема?

1. обращаете строку для замены
2. проверяете в цикле исходную строку на соответствие искомой
3. если вхождение, то заменяете
А можно код проги, если не затруднит?)
avizer вне форума Ответить с цитированием
Старый 20.03.2012, 13:07   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
I := 1;
While I <= Length(S) - Length(S1) do
  begin
     Temp := Copy(S, I, Length(S1));
     If Temp = S1 then
       begin
         for J := 0 to Length(S1)-1
           S[I + J] := S[Length(S1) - J];
          I := I + Length(S1);
       end
      else
       I := I + 1;
  end;
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 20.03.2012, 13:27   #5
avizer
Пользователь
 
Регистрация: 20.03.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Код:
I := 1;
While I <= Length(S) - Length(S1) do
  begin
     Temp := Copy(S, I, Length(S1));
     If Temp = S1 then
       begin
         for J := 0 to Length(S1)-1
           S[I + J] := S[Length(S1) - J];
          I := I + Length(S1);
       end
      else
       I := I + 1;
  end;
Выдает изначально введенные строчки и всё, может я что-то не так делаю:
Код:
uses crt;
var i,j:integer; s,s1,temp:string;
begin
clrscr;
write('vvedite s:');
readln(s);
write('vvedite s1:');
readln(s1);
i:= 1;
While i<= Length(s) - Length(s1) do
  begin
     temp := copy(s, i, Length(s1));
     If temp =s1 then
       begin
         for j:=0 to Length(s1)-1 do
           s[i+j]:=s[Length(s1)-j];
          i:=i+ Length(s1);
       end
      else
       i:= i + 1;
  end;
 writeln(s);
 writeln(s1);
 writeln(temp);
end.
avizer вне форума Ответить с цитированием
Старый 20.03.2012, 14:06   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

нашел у вас в коде две ошибки.
подправил.
попробуйте
Код:
i:= 1;
While i<= (Length(s) - Length(s1) + 1) do
  begin
     temp := copy(s, i, Length(s1));
     If temp =s1 then
       begin
         for j:=0 to Length(s1)-1 do
           s[i+j]:=s1[Length(s1)-j];
          i:=i+ Length(s1);
       end
      else
       i:= i + 1;
  end;

p.s. и не понятно, зачем вы выводите s1 и temp в конце.. для отладки что ли?!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.03.2012, 14:22   #7
avizer
Пользователь
 
Регистрация: 20.03.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
нашел у вас в коде две ошибки.
подправил.
попробуйте
Код:
i:= 1;
While i<= (Length(s) - Length(s1) + 1) do
  begin
     temp := copy(s, i, Length(s1));
     If temp =s1 then
       begin
         for j:=0 to Length(s1)-1 do
           s[i+j]:=s1[Length(s1)-j];
          i:=i+ Length(s1);
       end
      else
       i:= i + 1;
  end;

p.s. и не понятно, зачем вы выводите s1 и temp в конце.. для отладки что ли?!!
Всё равно не работает: при вводе s:qwerty и s1:qweasd - выдает те же самые строки
avizer вне форума Ответить с цитированием
Старый 20.03.2012, 14:22   #8
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
s1[Length(s1)-j]
спасибо, единицу прозевал...

Цитата:
i<= (Length(s) - Length(s1) + 1)
а тут не согласен.. +1 нужно было бы только при строгом неравенстве.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 20.03.2012, 14:23   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Всё равно не работает: при вводе s:qwerty и s1:qweasd - выдает те же самые строки
И правильно делает... попробуйте в s1 ввести qwe - для срабатывания условия нужно полное соответствие значения s1 части строки из s
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 20.03.2012, 14:26   #10
avizer
Пользователь
 
Регистрация: 20.03.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
И правильно делает... попробуйте в s1 ввести qwe - для срабатывания условия нужно полное соответствие значения s1 части строки из s
Точно, затуп Всем спасибо, задача решена)
avizer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вхождение подстроки в строку! Edimus Общие вопросы C/C++ 4 04.04.2011 07:50
Как определить вхождение подстроки в строку поля? Bendebej SQL, базы данных 3 23.03.2010 12:38
Дан символ C и строка S. Удвоить каждое вхождение символа C в строку S. MrJohanson Помощь студентам 1 10.03.2010 09:51
Дана строка S. Преобразовать строку, заменив в ней каждое многоточие одной точкой.Строки в C++ slog Помощь студентам 9 16.12.2008 20:14