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


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


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


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


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


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


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


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


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


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



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

Тип “рядок” (паскалевский 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*




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

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

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

  

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


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