• Program z2;
    var str:string;
    n:integer;
    b:byte;
    begin
    readln(str);
    for n:=1 to Length(str) do begin
    b:=OrdAnsi(str[n]);
    if (b<192) and (b<>32) then delete(str,n,1);
    end;
    writeln(str);
    end.
    Выдает: Ошибка времени выполнения: Индекс находился вне границ массива.
    Подскажите, пожалуйста, что не так

Ответы 1

  • "Не так" тут не понятый до конца механизм работы цикла for.В соответствии с заголовком цикла for n:=1 to Length(str) значение Length(str) вычисляется перед первым входом в цикл и в дальнейшем не перевычисляется. Вы же в теле цикла посредством delete(str,n,1); строку укорачиваете. Вполне естественно, что в какой-то момент параметр цикла i в str[n] будет указывать за пределы её текущей длины.
    • Автор:

      gummy pop
    • 5 лет назад
    • 0
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years