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.
Выдает: Ошибка времени выполнения: Индекс находился вне границ массива.
Подскажите, пожалуйста, что не так
Ответы
Ответ дал:
0
"Не так" тут не понятый до конца механизм работы цикла for.
В соответствии с заголовком цикла for n:=1 to Length(str) значение
Length(str) вычисляется перед первым входом в цикл и в дальнейшем не перевычисляется. Вы же в теле цикла посредством delete(str,n,1); строку укорачиваете. Вполне естественно, что в какой-то момент параметр цикла i в str[n] будет указывать за пределы её текущей длины.
В соответствии с заголовком цикла for n:=1 to Length(str) значение
Length(str) вычисляется перед первым входом в цикл и в дальнейшем не перевычисляется. Вы же в теле цикла посредством delete(str,n,1); строку укорачиваете. Вполне естественно, что в какой-то момент параметр цикла i в str[n] будет указывать за пределы её текущей длины.
Вас заинтересует
2 года назад
2 года назад
3 года назад
3 года назад
9 лет назад
10 лет назад