Студопедия
Контакти
 


Тлумачний словник

Реклама: Настойка восковой моли




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

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

Загрузка...

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

Загрузка...



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

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


 

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


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