Не понимаю как исправить. Ошибка времени выполнения: Индекс находился вне границ массива

var
    f: text;
    schet, max: integer;
    s: string;

begin
    assign(f, '24 варианты 1-4.txt');
    reset(f);
    max := 0;
    begin
        readln(f, s);
        schet := 1;
        for var i := 0 to length(s) - 1 do 
            if ((s[i] <> s[i + 1]) and (s[i + 1] <> s[i + 2])) then schet := schet + 1
            else 
            if (s[i] <> '0') then schet := schet + 1
            else begin
                if max < schet then max := schet;
                schet := 1;
            end;
        close(f);
        writeln(max);
    end
end.

В чем ошибка и как ее исправить?


Ответы (1 шт):

Автор решения: Инквизитор

В выражении if ((s[i]<>s[i+1]) and (s[i+1]<>s[i+2])) в последнем сравнении вы гарантированно в последней итерации цикла вылезаете за пределы длины строки s - элемента s[i+2] при i = length(s)-1 не существует.

Исправить можно. Например, путем включения дополнительной проверки на достижение итератором i значения length(s)-1 и, в случае успешного результата, невычисления второй части условия (and (s[i+1]<>s[i+2])).

→ Ссылка