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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2013, 07:23   #11
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Можно так (для FPC (для делфи убрать uses SysUtils))
Код:
uses SysUtils;

var
	s, instr : string;
	ch : Char;

begin
	ReadLn (s);
	ReadLn (ch);
	ReadLn (instr);
	
	WriteLn (StringReplace (s, ch, ch+instr, [rfReplaceAll]))
end.
Думаю можно с циклом for и 2-мя строками.. или с while и одной строкой..
Вся беда в том, что в instr может оказаться этот самый ch...
Poma][a вне форума Ответить с цитированием
Старый 25.11.2013, 08:46   #12
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
var s1,s2:string; c1:char;
procedure InsertStringAfterChar(c:char;var s,str:string);
var i:integer;
k:integer;
buf:string;
begin
buf:='';
for i:=1 to length(s) do
if s[i]=c then
buf:=buf+c+str
else buf:=buf+s[i];
s:=buf;
end;
begin
 s1 := 'abcdbeob';
 s2 := 'yyy';
 c1 := 'b';
 InsertStringAfterChar(c1,s1,s2);
 writeln(s1);
end.
Цитата:
abyyycdbyyyeobyyy
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 25.11.2013, 21:14   #13
azalia
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 21
По умолчанию

Спасибо большое!
azalia вне форума Ответить с цитированием
Старый 26.11.2013, 22:19   #14
azalia
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 21
По умолчанию

А можно сделать так, чтобы изменялась сама строка s1, в которую вставляем подстроку, а не buf? Предыдущий вариант, конечно, подходит, но с меня еще и так требуют.
azalia вне форума Ответить с цитированием
Старый 26.11.2013, 23:10   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
А можно сделать так, чтобы изменялась сама строка s1,
в коде Mad_Cat пост #13 так и происходит, после процедуры InsertStringAfterChar изменяется s1


Вы, наверное, хотите, чтобы дополнительная переменная (строка buf) не использовалась, да?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.11.2013, 23:12   #16
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
в коде Mad_Cat пост #13 так и происходит, после процедуры InsertStringAfterChar изменяется s1
ТС хочет решение без доп. строк..

Я бы использовал while и после вставки Inc (i, Length(s2)) (а в конце while идет уже Inc(i))..
Poma][a вне форума Ответить с цитированием
Старый 26.11.2013, 23:43   #17
azalia
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 21
По умолчанию

Спасибо, попробую)
azalia вне форума Ответить с цитированием
Старый 09.01.2014, 12:39   #18
azalia
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 21
По умолчанию

Код:
var
  s1, s2: string;
  c: char;

///После каждого вхождения символа С в строку S1 вставляет строку S2
procedure Insert_str(var s1, s2: string; c: char);
var
  i, j, p: integer;
begin
  i := 1;
  while i <= s1.length do
  begin
    if s1[i] <> c then i := i + 1
    else
    begin
      SetLength(s1, s1.length + s2.length);
      for j := 1 to (s1.Length - i - s2.Length) do
        s1[s1.Length + 1 - j] := s1[s1.Length + 1 - j - s2.Length];
      for p := 1 to s2.length do       
        s1[i + p] := s2[p];
      i := i + s2.Length + 1;
    end;
  end;
end;

begin
  write('Введите строку: ');
  readln(s1);
  write('Введите строку: ');
  readln(s2);
  write('Введите символ: ');
  readln(c);
  Insert_str(s1, s2, c);
  write(s1);
end.
azalia вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввести строку и после каждого символа "q" ставить "**" karamzin Паскаль, Turbo Pascal, PascalABC.NET 2 25.11.2012 02:57
Как вывести строку, которая состоит из аргументов командной строки так, чтобы каждое слово выводилось без первого символа Mik2012 Общие вопросы C/C++ 1 31.10.2012 00:29
MinLines(f), которая вставляет строку минимальной длины в начало и конец файла ArtS Паскаль, Turbo Pascal, PascalABC.NET 0 24.05.2009 19:13
Записать текст лесенкой(по одному слову в строке),вставляя пустую строку после каждого четверостишья klindk Паскаль, Turbo Pascal, PascalABC.NET 2 27.11.2008 14:34