Внимание! При решении задач со строковыми переменными Вы можете столкнуться с распространенной трудно обнаруживаемой ошибкой, когда после присваивания некоторым элементам строки символов ни содержимое, ни длина строки не изменяются. Разберемся, с чем это связано.
Очень важно понимать, что при доступе к некоторому элементу строки значение ее текущей длины не проверяется. Это иллюстрирует следующая программа:Program StringElements; Var S : string; {макс. длина строки = 255} Begin S:='ABCD'; {инициализация строки} writeln (S,' ',Length(S)); {вывод строки и ее длины} S[5] := 'E'; {присваивание элементу строки} writeln (S,' ',Length(S)); {ни сама строка, ни ее длина не изменились} End.
А каким образом можно было бы обновить длину строки, чтобы буква E вывелась в ответе?
Можна вот так: S:='ABCD'; {инициализация строки} writeln (S,' ',Length(S)); {вывод строки и ее длины} S :=S+ 'E'; {добавляем элемент к строке} writeln (S,' ',Length(S)); { строка, и ее длина изменились}
Но если Вы работаете на Турбо/Борланд Паскаль, есть еще один способ. Динамическая длина строки находится в нулевом символе строки, а значит S[5] :='E'; S[0] = Char(5); writeln (S,' ',Length(S)); { строка, и ее длина изменились} имеет место быть.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения