|
1 / 1 / 0
Регистрация: 02.08.2022
Сообщений: 12
|
|||||||||||
Строка >255 Всё работает?16.03.2023, 19:14. Показов 1418. Ответов 5
На форуме видел следующую тему: Как ввести в строку более 255 символов?
о Free-Pascal, есть ли в PascalABC.NET похожие сложности на счет длинных строк? Написал код, который разрешает вводить строку более 255 символов (проверил ручками). Помогите найти подводные камни программы если они есть. Как вы думаете сработает ли на Я.Контесте без сбоев (районная олимпиада скоро как-никак) ? Код 1
0
|
|||||||||||
| 16.03.2023, 19:14 | |
|
Ответы с готовыми решениями:
5
Дана строка S длиной не более 255 символов |
|
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
||||||||||||
| 16.03.2023, 22:05 | ||||||||||||
Сообщение было отмечено Ilya_2009 как решение
Решениеs := #0*3000 - хотя это глупость.В фри паскале обычные строки размерны - то есть они выделяют для себя на стеке 256 байт. В .Net строки (все, даже если вы укажете статическую длину) ссылочные - их содержимое хранит в динамической памяти. Это значит что в случае:
А обе переменные будут на неё лишь ссылаться Но это так же значит что просто так менять 1 символ со всей строки нельзя - вдруг на неё другая переменная где то ссылается. Вместо этого, ваше s[i] := 'F'; делает новую копию строки, но с 1 символом заменённым на FРазумеется это нереально медленно Если программируете в PascalABC.NET - лучше использовать только современные методы для строк, а не то что поддерживается ради совместимости.
## это заголовок короткой программы - по сути заменяет begin-end.ReadString возвращает строку, поэтому у s тип string автоматически, указывать лишний раз не стоит.А когда вы ставите точку после переменной - вам показывает все "методы", то есть подпрограммы соответствующего типа (тут - string), вызываемые по точке, как .PrintlnСоветую пробежаться по этому списку хотя бы разок, посмотреть что вообще существует - самое интересное само отложится в памяти на потом.
1
|
||||||||||||
|
Модератор
10442 / 5734 / 3406
Регистрация: 17.08.2012
Сообщений: 17,442
|
|
| 16.03.2023, 22:50 | |
|
Ilya_2009, проще говоря, в Pascal ABC.NET и во Free Pascal тоже (а также в многих других паскалях, за исключением Turbo/Borland Pascal), строка запросто может быть длиннее 255 символов.
1
|
|
|
1 / 1 / 0
Регистрация: 02.08.2022
Сообщений: 12
|
||||||
| 17.03.2023, 12:13 [ТС] | ||||||
|
А как тогда рекомендовано менять символ строки? Не создавать ли новую куда записывать ответ, если это что-то поменяет? Оптимизируйте, пожалуйста, моё решение выдуманной задачи.
0
|
||||||
|
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
||||||||||||||||||||||||||||||||
| 17.03.2023, 14:05 | ||||||||||||||||||||||||||||||||
Сообщение было отмечено Ilya_2009 как решение
Решение
Если надо изменяемую коллекцию символов - есть массив (который быстро изменять, но медленно расширять) и StringBuilder (который быстро расширять, дописывая в символы в конец, но чуть медленнее изменять).
Общий принцип, который работает в любом случае:
Или можно скопировать в него все символы из строки и затем уже подменять их:
1. "string.Create" вместо "new string", потому что у точки (после скобок) приоритет больше чем у new. 2. ".ConvertAll" создаёт новый массив из предыдущего, по указанному правилу. То есть в итоге используется 2 промежуточных массива вместо 1 Добавлено через 8 минут
string неизменяемы - содержимое метод тоже заменить не может. Остаётся только новую строку делать.Добавлено через 4 минуты Ну и это всё нужно если вам в результате нужна именно строка. С LINQ проще:
.Select создаёт не новый контейнер данных, вроде массива или строки, а последовательность, у которой можно в любом момент запросить следующий элемент (что делает .Print).В итоге в памяти хранится только исходная строка и обрабатываемый в данный момент символ.
2
|
||||||||||||||||||||||||||||||||
|
1 / 1 / 0
Регистрация: 02.08.2022
Сообщений: 12
|
|
| 17.03.2023, 18:34 [ТС] | |
|
Спасибо, Sun Serega, за такой подробный ответ и советы!
0
|
|
| 17.03.2023, 18:34 | |
|
Помогаю со студенческими работами здесь
6
Распечатать все символы с четными номерами в интервале кодов от 0 до 255
Зашифровать текст(не более 255 символов),записываю все слова наоборот 421 cannot connect to SMPT server 255.255.255.255 (255.255.255.255:25) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|