0 / 0 / 0
Регистрация: 11.02.2018
Сообщений: 1
1

Процедура: заменить в символьной строке все вхождения одной подстроки на другую

11.02.2018, 20:33. Показов 9041. Ответов 6
Метки нет (Все метки)

Дано задание: "Напишите программу, которая заменяет в символьной строке все вхождения одной подстроки на другую. Используйте процедуру.

Входные данные:"Первая входная строка содержит символьную строку, которую нужно обработать. Во второй и третьей строках записаны соответственно подстрока-образец (которую нужно менять) и подстрока-замена."

Выходные данные:"Программа должна вывести обработанную символьную строку, в которой все вхождения подстроки-образца заменены на подстроку-замену."

Пример (как объяснили): Вход: sdfBHUsdf
sdf
VIC
Выход: VICBHUVIC

"Приказали" сделать в Pascal с помощью символьных строк (моя глупость соизмерима с градусной мерой тупого угла).
Помогите кто чем может.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2018, 20:33
Ответы с готовыми решениями:

В строке заменить все вхождения одной подстроки в другую
Добрый день всем участника форума! Хотелось бы задать Вам несколько вопросов относительно строк,...

Напишите программу, которая заменяет в символьной строке все вхождения одной подстроки на другую
Программа именно с помощью трок Напишите программу, которая заменяет в символьной строке все...

Составить программу, позволяющую заменить в строке все вхождения одной подстроки на другую
Помогите составить и решить программу: Составить программу, позволяющую заменить в строке все...

Заменить в символьной строке все вхождения одной подстроки на другую
Напишите программу, которая заменяет в символьной строке все вхождения одной подстроки на другую....

6
1753 / 1345 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
11.02.2018, 23:15 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure Swap(var s: string);
var sub1, sub2: string;
begin
  readln(sub1);
  readln(sub2);
  while (pos(sub1, s) <> 0) do begin
    insert(sub2, s, pos(sub1, s));
    delete(s, pos(sub1, s), length(sub1));
  end;
end;
 
var s: string;
begin
  readln(s);
  Swap(s);
  writeln(s);
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7082 / 4205 / 2733
Регистрация: 22.11.2013
Сообщений: 12,055
Записей в блоге: 1
12.02.2018, 08:21 3
Hitoku,
будет «больно», если замена содержит строку поиска...
0
1753 / 1345 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
12.02.2018, 10:06 4
bormant, в таком случае можно их проверять на равенство, и если они равны, то оставлять все как есть
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7082 / 4205 / 2733
Регистрация: 22.11.2013
Сообщений: 12,055
Записей в блоге: 1
12.02.2018, 12:24 5
Цитата Сообщение от Hitoku Посмотреть сообщение
в таком случае можно их проверять на равенство
Это как? Простой пример:
найти: "a"
заменить на: "aa"
Результат -- бесконечный цикл
0
1753 / 1345 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
12.02.2018, 12:31 6
bormant, вот, исправил
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure Swap(var s: string);
var sub1, sub2: string;
    i: integer;
begin
  i := 1;
  readln(sub1); readln(sub2);
  while i <= length(s) do begin
    if (s[i] = sub1[1]) and (copy(s, i, length(sub1)) = sub1) then begin
      delete(s, i, length(sub1));
      insert(sub2, s, i);
      inc(i, length(sub2));
    end;
    inc(i);
  end;
end;
 
var s: string;
begin
  readln(s);
  Swap(s);
  writeln(s);
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7082 / 4205 / 2733
Регистрация: 22.11.2013
Сообщений: 12,055
Записей в блоге: 1
12.02.2018, 15:02 7
Hitoku,
то же самое можно записать немного проще:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure Replace(var s: String; const w, r: String);
var i: Integer;
begin
  for i:=Length(s)-Length(w) downto 1 do
    if Copy(s,i,Length(w))=w then begin
      Delete(s,i,Length(w));
      Insert(r,s,i);
    end;
end;
var
  s, s1, s2: String;
begin
  ReadLn(s);
  ReadLn(s1);
  ReadLn(s2);
  Replace(s,s1,s2);
  WriteLn(s);
end.
Добавлено через 4 минуты
Если смущает Copy, можно написать отдельно функцию сравнения по месту, вроде такой:
Pascal
5
    if MemCmp(s[i],w[1],Length(w))=0 then begin
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
function MemCmp(var a, b; size: Word): Integer;
var
  r: Integer;
  aa: array [0..$FFFD] of Byte absolute a;
  bb: array [0..$FFFD] of Byte absolute b;
begin
  for size:=0 to size-1 do begin
    r:=aa[size]-bb[size];
    if r<>0 then Break;
  end;
  MemCmp:=r;
end;
Добавлено через 58 минут
Хотя вру, в таком варианте "хвост" продолжает попадать под сравнение, замена не эквивалентна...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.02.2018, 15:02
Помогаю со студенческими работами здесь

Заменить в строке все вхождения одной подстроки на другую
помогите пожалуйста с решением задачи! замените в строке все вхождения одной подстроки на другую в...

Заменить в заданной строке все вхождения некоторой подстроки на другую подстроку
Написал для этой задачи код. Я понимаю, что можно писать разными способами, но объясните мне ,...

Найти в исходной строке все вхождения заданной подстроки и заменить их на другую строку
Доброго времени суток! Помогите, пожалуйста, с задачей. Буду премного благодарна! Найти в...

Найти в исходной строке все вхождения заданной подстроки и заменить их на другую строку
Найти в исходной строке все вхождения (но не более девяти) заданной подстроки и заменить их на...

Заменить все вхождения подстроки W в строке St на подстроку V
заменить все вхождения подстроки W в строке St на подстроку V

STL. Заменить в строке S все вхождения подстроки S1 на подстроку S2
Даны строки S, S1 и S2 вводимые с клавиатуры. Требуется заменить в строке S все вхождения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru