Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 5 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 21.05.2007
Читал вот здесь про String в Pascal : http://informatics.mccme.ru/moodle/mod/book/view.php?id=532&chapterid=246. Понятно все, но вот про момент обращения к строке как к массиву не совсем понятно.
Привожу то, что написано в ссылке:

Внимание! При решении задач со строковыми переменными Вы можете столкнуться с распространенной трудно обнаруживаемой ошибкой, когда после присваивания некоторым элементам строки символов ни содержимое, ни длина строки не изменяются. Разберемся, с чем это связано.

Очень важно понимать, что при доступе к некоторому элементу строки значение ее текущей длины не проверяется. Это иллюстрирует следующая программа:Program StringElements;
Var
S : string; {макс. длина строки = 255}
Begin
S:='ABCD'; {инициализация строки}
writeln (S,' ',Length(S)); {вывод строки и ее длины}
S[5] := 'E'; {присваивание элементу строки}
writeln (S,' ',Length(S)); {ни сама строка, ни ее длина не изменились}
End.


А каким образом можно было бы обновить длину строки, чтобы буква E вывелась в ответе?



Партнер
 

Member
Статус: Не в сети
Регистрация: 28.05.2007
Откуда: Санкт-Петербург
Код:
...
SetLength(S, 5);
S[5] := 'E';
...


 

Member
Статус: Не в сети
Регистрация: 21.05.2007
Спасибо! Че-то во всех статьх, которые я нашел про Pascal, этой информации не было.....

Добавлено спустя 21 минуту 19 секунд:
Все-таки не работает. Для SetLength Pacal пишет - unknown identifier.
В чем может быть дело?


 

Можна вот так:
S:='ABCD'; {инициализация строки}
writeln (S,' ',Length(S)); {вывод строки и ее длины}
S :=S+ 'E'; {добавляем элемент к строке}
writeln (S,' ',Length(S)); { строка, и ее длина изменились}

Но если Вы работаете на Турбо/Борланд Паскаль, есть еще один способ.
Динамическая длина строки находится в нулевом символе строки, а значит
S[5] :='E';
S[0] = Char(5);
writeln (S,' ',Length(S)); { строка, и ее длина изменились}
имеет место быть.


 

Member
Статус: Не в сети
Регистрация: 05.07.2007
Откуда: Гагры
а я думал паскаль уже окончательо умер вместе с делфи и борландом

_________________
Помогаю излечится от зависимости к Редмондской продукции


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 5 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  

Лаборатория














Новости

Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan