Другие языки программирования и технологии

Нет перегруженной подпрограммы с таким количеством параметров Replace

Что означает данная ошибка и как её исправить?? Program3.pas(6) : Нет перегруженной подпрограммы с таким количеством параметров Replace

Сам код:

begin
var s:= '3'*90 + '1';
while ('331' in s) or ('166' in s) do
begin
if '331' in s then
s := s.Replace('331','16',1)
else
s := s.Replace('166','31',1);
end;
print(s);
end.
1) В Паскале нет функции Replace, это не Питон. Стандартным подходом является написание своей функции или процедуры (в общем, в стандарте-то и типа string нет, и динамические массивы отсутствуют). В каждой реализации языка есть свои средства для замены строк, например, FreePascal содержит функции ReplaceStr, ReplaceText, StringReplace.

2) В Паскале нет оператора in для поиска подстрок в строке. Нужно использовать функцию Pos:
 p := Pos(sub, str);
if p > 0 then ...

3) В Паскале нет методов, поэтому синтаксис s.что-то-там() недопустим. Все функции имеют префиксную нотацию, все параметры передаются в скобках справа:
 str := ReplaceStr(str, sub, repl) 

4) В Паскале нет функции print. Значения выводятся в консоль или файл процедурами write, writeln и автоматически ничем не разделяются, пробелы надо добавлять вручную.

5) В Паскале все переменные нужно объявить в начале программы, процедуры или функции (до первого begin):
 var s: string;
p: integer;
и т.д.
Андрей Волков
Андрей Волков
87 571
Лучший ответ
Андрей Карпов Потому что в примере PascalABC, а в нём всё есть
А матчасть для кого пишется

Replace(s1,s2: string): string Возвращает строку, полученную из исходной строки заменой ВСЕХ вхождений подстроки s1 на строку s2
Андрей Карпов
Андрей Карпов
51 683
Ошибка "Нет перегруженной подпрограммы с таким количеством параметров Replace" возникает, когда вы вызываете функцию `Replace` с неправильным количеством аргументов. В Pascal функция `Replace` требует три аргумента: исходную строку, подстроку для замены и строку-заменитель.

В вашем коде, в двух строках с использованием функции `Replace`, вы указываете только два аргумента: исходную строку и подстроку для замены, пропуская строку-заменитель. Это приводит к ошибке.

Чтобы исправить эту ошибку, вам нужно указать третий аргумент - строку-заменитель. Например, замените строки:

```pascal
s := s.Replace('331','16',1);
```

и

```pascal
s := s.Replace('166','31',1);
```

на:

```pascal
s := s.Replace('331','16','');
```

и

```pascal
s := s.Replace('166','31','');
```

Добавление пустой строки в качестве третьего аргумента указывает, что вы не хотите заменять найденные подстроки какой-либо другой строкой, а просто удалить их.

После внесения этих изменений код должен скомпилироваться без ошибок.
Frank Juraev
Frank Juraev
41 234