Пример 7.3. B заданном тексте одно заданное слово везде заменить на другое заданное слово такой же длины.

Тест

Данные Результат
Текст Слово1 Слово2
''2sinx+siny'' ''sin'' ''cos'' ''2cosx+cosy''


Школьный АЯ
алг Замена (арг рез лит Текст, арг лит Слово1, Слово2)
  дано | длины Слово1 и Слово2 совпадают
  надо | в строке Текст подстрока Слово1 везде
| заменена на подстроку Слово2

нач цел i, DS
  DS:=длин(Слово1)
  нц для i от 1 до длин(Текст)-DS+1
  если Текст[i : i+DS-1] = Слово1 | если вырезка равна Слово1, 
  то Текст[i : i+DS-1] :=Слово2 | то вырезке присваиваем Слово2
i:=i+DS   | и продвигаемся на длину слова

  все
  кц
кон

Исполнение алгоритма
Обозначение проверяемого условия:
Текст[i : i+DS-1] = Слово1 => (1)
Для тестовых данных имеем: DS=3, длин (Текст)-DS+1= 8.

i Текст[i : i+2] (1) Текст
1 
2 
5 
6 
7 
10
"2si" 
"sin" 
"x+s" 
"+si" 
"sin"
- 
+ 
- 
- 
+
"2sinx+siny" 
"2cosx +siny" 
 
 "2cosx+cosy" 
 


 
Turbo Pascal

(эта программа, использующая стандартную функцию  Pos , не требует,  чтобы длины  заменяемого и вставляемого слов были одинаковыми)

Program Replace;
  Uses Crt;
  Var Text, Slovo1, Slovo2 : String;
  i, DlinaSlova, P : Integer;

BEGIN ClrScr;
  Write('Введите строку : '); ReadLn(Text);
  Write('Какое слово заменить ? '); ReadLn(Slovo1);
  Write('На какое слово заменить ? '); ReadLn(Slovo2);

  WriteLn; WriteLn('О т в е т : ');
  WriteLn('Исходный текст: ', Text); DlinaSlova:=Length(Slovo1);

  DlinaSlova:=Length(Slovo1);
  P:=Pos(Slovo1,Text); {номер позиции, с которой в строке Text }
{в первый раз встречается подстрока Slovo1  }
  While P>0 do {цикл продолжается до тех пор,пока подстрока}
{Slovo1 встречается в строке Text }
begin
Delete(Text, P, DlinaSlova); {удаление подстроки Slovo1, начинаю-}
  {щейся с позиции P, из строки Text  }
Insert(Slovo2, Text, P);  {вставка подстроки Slovo2  }
{ в строку Text с позиции Р}
P:=Pos(Slovo1, Text); {номер позиции, с которой подстрока Slovo1} 
{встречается в строке Text в очередной раз}
end;

  WriteLn('Новый текст: ', Text); 
  ReadLn
END.
 
QBasic

CLS : INPUT "Введите текст : " , Text$
INPUT "Какое слово заменить ? " , Slovo1$
INPUT "На какое слово заменить ? " , Slovo2$

PRINT : PRINT "О т в е т"
PRINT "Исходный текст : " ; Text$
DlinaText = LEN(Text$) : DlinaSlova = LEN(Slovo1$)
FOR i = 1 TO DlinaText-DlinaSlova+1
  IF MID$(Text$, i, DlinaSlova) = Slovo1$ THEN
MID$(Text$, i) = Slovo2$ : i=i+DlinaSlova
  END IF
NEXT i

PRINT "Новый текст : " ; Text$
END

Другие записи

10.06.2016. Пример 7.4. Заданную последовательность слов переупорядочить в алфавитном порядке (то есть выполнить лексикографическое упорядочение).
Тест Данные Результат Words=(''стул'', ''гора'', ''яма'', ''стол'')   Words=("гора", "стол", "стул",  "яма") Школьный АЯ   (АЯ расширен добавлением типа данных лит таб   и…
10.06.2016. Пример 7.5. Проверить, имеется ли в линейной записи заданной математической формулы баланс открывающих и закрывающих скобок.
Система тестов Номер  теста Проверяемый  случай Данные Результат 1 При просмотре линейной записи слева направо первой встречается закрывающая скобка ''a)b+1('' ''Нет баланса'' 2 Первой…