Рядок (програмування): відмінності між версіями
[перевірена версія] | [перевірена версія] |
Вилучено вміст Додано вміст
Немає опису редагування |
стиль, оформлення |
||
Рядок 1:
{{Otheruses|Рядок (значення)}}
'''Рядок''' ({{lang-en|String}}
== Внутрішнє представлення рядка в пам'яті ==
Рядок 8:
Основні проблеми в машинному поданні строкового типу:
* рядки можуть мати досить істотний розмір (до декількох десятків мегабайтів);
* змінюється з часом розмір
У поданні рядків в пам'яті комп'ютера існує два принципово різних підходи.
Рядок 20:
* рядок може містити будь-які дані;
* можливо на програмному рівні стежити за виходом за межі рядка при її обробці;
* можливо швидке виконання операції виду «взяття N-
==== Недоліки ====
* проблеми зі зберіганням і обробкою символів довільної довжини;
* збільшення витрат на зберігання рядків
* обмеження максимального розміру рядка. У сучасних мовах програмування це обмеження скоріше теоретичне, так як зазвичай розмір рядка зберігається в 32-бітовому полі, що дає максимальний розмір рядка в 4 294 967 295 байт (4 [[Гігабайт|гігабайти]]);
Рядок 32:
Другий метод полягає у використанні «завершального байту»<ref>http://queue.acm.org/detail.cfm?id=2010365</ref><ref>http://russian.joelonsoftware.com/Articles/BacktoBasics.html</ref>. Одне з можливих значень символів алфавіту (як правило, це символ з кодом 0) вибирається як ознака кінця рядка, і рядок зберігається як послідовність байтів від початку до кінця. Є системи, в яких роль ознаки кінця рядка виконує не символ 0, а байт 0xFF (255) або код символу «$».
Метод має три назви
==== Переваги ====
Рядок 44:
==== Недоліки ====
* значний час виконання операцій отримання довжини і конкатенації рядків;
* відсутність засобів контролю за виходом за межі рядка, в разі пошкодження завершального байта можливість пошкодження великих областей пам'яті, що може привести до непередбачуваних наслідків
* неможливість використовувати символ завершального байту
* неможливість використовувати деякі кодування з розміром символу в кілька байт (наприклад, [[UTF-16]]), тому що у багатьох таких символах, наприклад Ā (0x0100), один з байтів дорівнює нулю (в той же час, кодування [[UTF-8]] вільне від цього недоліку).
Рядок 52:
=== Подання у вигляді списку ===
Мови [[Erlang]]<ref>Simon St. Laurent. Introducing Erlang.
== Реалізація в мовах програмування ==
* У перших мовах програмування взагалі не було строкового типу; програміст повинен був сам будувати функції для роботи з рядками того чи іншого типу.
* У Сі використовуються нуль-
* У стандартному Паскалі рядок виглядає як масив з 256 байтів; перший байт зберігав довжину рядка, в інших зберігається її тіло. Таким чином, довжина рядка не може перевищувати 255 символів. У Borland Pascal 7.0 також з'явилися рядки «по типу [[C++|Сі]]<nowiki/>»
* У [[Object Pascal]] та [[C++]] STL рядок є «чорним ящиком», в якому виділення / вивільнення пам'яті відбувається автоматично
* У C # та іншими мовами із збіркою сміття рядок є незмінним об'єктом; якщо рядок потрібно модифікувати, створюється інший об'єкт. Цей метод повільний і витрачає чимало тимчасової пам'яті, але добре поєднується з концепцією збірки сміття. Перевага цього методу в тому, що присвоювання відбувається швидко і без дублювання рядків. Також є деякий ручний контроль над конструюванням рядків (в [[Java]], наприклад, через класи StringBuffer і StringBuilder)
* У деяких мовах (наприклад, Standard ML) крім цього, є додатковий модуль для забезпечення ще більшої ефективності
== Операції ==
=== Найпростіші операції з рядками ===
* Отримання символу за номером позиції ([[Індекс|індексу]])
* Конкатенація (з'єднання) рядків.
Рядок 87:
=== Більш складні операції ===
* Знаходження мінімального
* Пошук в двох масивах рядків збігаються послідовностей (завдання про [[плагіат]]).
Рядок 96:
== Подання символів рядка ==
До останнього часу один символ завжди кодувався одним байтом (8 двійкових бітів; застосовувалися також кодування з 7 бітами на символ), що дозволяло представляти 256 (128 при
* Перемикання мови керуючими кодами. Метод не стандартизований і позбавляє текст самостійності (тобто послідовність символів без керуючого коду на початку втрачає сенс); використовувався в деяких ранніх русифікації [[ZX Spectrum|ZX-Spectrum]] і БК.
Рядок 109:
* [[Частота кадрів]]
* [[Чорний список]]
== Примітки ==
{{reflist}}
{{Compu-stub}}
{{Без джерел|дата=червень 2010}}
|