Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






ТЕОРЕТИЧНА ЧАСТИНА

Тип “рядок” (паскалевский string) у С/С++ відсутній. Змінні – рядки моделюються масивами символів. Саме такі змінні – масиви і розуміються у С/С++ під поняттям “рядок”. Разом з тим у С++ звичайно створюють новий тип, точніше, клас String, екземпляри якого по способу роботи з ними дуже схожі на паскалевскі рядки. У С/С++ є велика бібліотека функцій для роботи з рядками, що значно спрощує рішення багатьох задач. Ці функції оголошені у файлі <string.h>, дуже часто, коли заводиться програмувати задачу з рядками, виявляється, що ми просто не згадали про корисну функцію <string>.

Робота з рядками природним чином вимагає уміння працювати з текстовими файлами, що складаються з рядків. Є два способи роботи з файлами – “старий”, на основі функцій і структур даних, оголошених у файлі <stdio.h>, і “новий”, орієнтований тільки на С++ і заснований на понятті класу вводу-виводу. Переваги нового способу в тім, що його можна використовувати більш природним чином для нових типів даних. У роботі розглянуто основи нового способу, а старий рекомендується освоїти самостійно, користуючись, наприклад, [2] і [3].

Рядок – літeрал задається в мовах С/С++ як ланцюжок символів, укладений у подвійні лапки. Внутрішнє представлення такого літерала - ланцюжок кодів символів, за якими іде нульовий байт, що є ознакою кінця рядка. Довжина літерала (кількість байтів) – на 1 більше кількості “видимих” символів. Таке представлення рядка називають формат ASCIZ. ASCIZ – кодова таблиця ASCII + нульовий (zero) байт наприкінці. Оскільки практично всі стандартні функції для роботи з рядками орієнтуються на формат ASCIZ, у масивах, що представляють рядки, потрібно забезпечити “кінцевий” нульовий байт. Перевага такого представлення рядків у порівнянні з паскалевським у тім, що немає обмеження на довжину рядків – витрати на визначення довжини рядка. Тепер довжина не зберігається як перший байт рядка, а повинна підраховуватися під час “подорожі” від початку рядка до нульового байта. Приклади визначення рядків:

char sta [50]; /* Рядок з 49 символів + байт для нуль-термінатора*/

char stb [] = “Program”; /* Масив, ініціалізованний рядком-літералом*/

char *msg = “Begin”; /* Покажчик на char, ініціалізованний адресою рядка-літерала */

Пояснимо термін “константа” стосовно до рядків. Змінна sta – це покажчик – константа, у тім сенсі, що область пам'яті, виділену для збереження елементів масиву компілятором, не можна змінити. Тому ж не можна виконувати арифметичні операції, намагаючись змінити значення покажчика sta. Однак, будь-які зміни самих елементів рядка припустимі. Іншими словами, sta=stb; sta=msg; sta++ заборонено, а sta [2] = 's' дозволено. Усе те ж саме можна сказати і про перемінну stb. Для змінної – покажчика дозволено будь-які операції, припустимі для покажчиків, зокрема, msg = 'Б' (одержуємо “Беgіn”), msg++ (msg починає вказувати на 'е' з ”Begin”), msg=stb (msg починає вказувати на ”Program”, а доступ до ”begin” губиться).

Ще більше розмаїтості вносить слово соnst, якщо його використовувати з покажчиками. Розглянемо простий приклад.

const char* pca = “Program”;

char* const pcb = “begin”;

pca [2] = ‘а'; //неприпустимо, тому що саме значення - константа

pcb [1] = 'і'; //припустимо, одержимо “Bigin”

pca = “function”; //припустимо, тому що рса - змінна

pcb = “end”; //неприпустимо, тому що pcb – іменування константи типу char*




Переглядів: 573

<== попередня сторінка | наступна сторінка ==>
ВАРІАНТИ ЗАВДАНЬ РОБОТИ | Функції для роботи з рядками

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

 

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.004 сек.