if s[i] in ['A','B','E','F'] then пишет Ошибка времени выполнения: Индекс находился вне границ массива. Как исправить?
program z1;
var s:string;
i,L,maxL:integer;
begin
readln(s);
L:=0;
maxL:=0;
for i:=0 to length (s) do
if s[i] in ['A','B','E','F'] then
begin
L:=L+1;
if L>maxL then
maxL:=L;
end
else
L:=0;
writeln(maxL);
end.
Ответы (2 шт):
Автор решения: Alex_Skvortsov
→ Ссылка
Ошибка кроется в этой строчке:
for i:=0 to length (s) do
Почему так происходит:
Пусть есть строка "АБВ"
У нее есть символы с номерами 0 ("А"), 1 ("Б"), 2 ("В")
А длина для нее 3
То есть вы внутри цикла пытаетесь обратиться к символу с номером 3, а есть только номер 2. Потому и
Индекс находится вне границ массива
Исправляется легко:
for i:=0 to (length (s) - 1) do
UPD:
Непосредственно Паскалем не занимался уже оооочень давно, так что, ориентируясь на другой ответ, правильным будет такое решение:
for i:=1 to length (s) do
Автор решения: Igor
→ Ссылка
Индексация строк в Паскале начинается с единицы:
for i := 1 to Length(s) do