Пример 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