Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metvkazlab.doc
Скачиваний:
4
Добавлен:
22.11.2019
Размер:
871.94 Кб
Скачать

Тема: " Використання бібліотечних функцій для обробки символьної інформації."

Мета: Навчитись описувати, задавати і обробляти символьну інформацію засобами мови C, а також використовувати бібліотечні функції для роботи з символьними даними і текстовою інформацією.

  1. Короткі теоретичні відомості

Масиви символів (рядки). Опис. Рядки, які є послідовністю символів, задаються масивами символів. Синтаксис опису:

char string[10];

В цьому масиві можна зберігати дев’ять символів можна зберігати і менше символів. Чому в асиві, чкий містить 10 елементів, можна зберігати 9 символів.? В мові С рядки визначаються як послідовність символів, що закінчується нульовим символом. Нульовий символ - це спеціальний символ, який позначається \0. Хоч він записується в виді двох знаків (оберненої риски і 0) компілятор сприймає його як один символ, що відповідає коду ASCII ‘0’. Це є спеціальний символ мови С. В чому ж різниця між рядками і масивами символів? По означенню рядок –це послідовність символів з завершуючим символом \0 Масив по означенню являє собою послідовність символів. Тому рядок –це масив символів з завершуючим нулем.

Наприклад в рядку

fghhjkg є 7 символів і ще нульовий символ \0 -всього вісім.

Задання символьних масивів. Масиви можуть задаватися при описі.

Char r[10]={‘a’,’b’,’c’,’d’, ‘\0’}; але вигідніше використовувати рядкові літерали, тобто послідовності символів в подвійних лапках.

Char r[10]=’’abcd’’;

Кожний раз, коли в програмі використовується рядковий літерал, компілятор автоматично додає нульовий символ в кінець рядка. Якщо при описі і заданні масиву символів опустити його довжину, то компілятор сам порахує довжину масиву по довжині літералу

Char r[]=’’abcd’’; В цьому рядку є масив з 5-ти елементів.

Функції С для роботи з рядками визначають довжину рядків по закінченню нульового символа. Якщо в рядку відсутній нульовий символ, то програма порахує кінець рядка там, де випадково буде нульовий символ. В цьому випадку зустрічається багато помилок.

Вивід рядків здійснюється функціями puts() і printf().

Функція puts(). Бібліотечна функція виводить рядок тексту на екран. Єдиним її аргументом є вказівник на рядок, який треба вивести. Оскільки літеральні рядки інтерпретуються компілятором як вказівники на рядки, функція puts() може виводити як змінні рядкового типу Char r[10]={‘a’,’b’,’c’,’d’, ‘\0’};, так і літерали Char r[10]=’’abcd’’;

Після кожного виведеного рядка функція автоматично переходить на новий рядок.

Приклад використання функції puts()

#include <stdio.h>

char *a1=»c1»;

char *a2=»c2»;

char *a3=»c3»;

Описані і заданіс пять змінних, які містять рядки, кожна з них є вказівником на змінну типу char і рядковою змінною.

int main()

{

puts(a1);

puts(a2);

puts(a3);

Вивід всіх рядків з допомогою функції . puts

return 0; }

Результат

с1

с2

с3

с4

с5

Функція printf(). Рядки можна виводити за допомогою функції printf(). Для виводу рядка використовується специфікація формату %s. Аргументом є тип вказівника на рядок. Рядок виводиться на екран, до тих пір поки не зустрінеться завершуючий нульовий символ. Наприклад

char *str=fghjkl;

printf(%s, str);

Рядки можна виводити разом з числовими змінними.

char *str=begin;

char *name=end;

int var=100;

printf(%s var=%d %s, str, var, name);

Результат

begin var=100 end

Визначення довжини рядка. Довжина рядка (кількість символів в ньому) визначається функцією strlen(). Прототип функції знаходиться в файлі string.h.

size_t strlen(char *str);

Тип size_t визначений в файлі stdring.h як unsigned. (ціле без знаку). Ця функція повертає ціле число без знаку. Цей тип використовується в багатьох функціях, які призначені для роботи з рядками. Аргумент, який передається в функцію це вказівник на рядок, довжину якого треба визначити. Функція повертає кількість символів відпочатку рядка до першого нульового символу, не включаючи його.

Копіювання рядків. Один рядок не можна присвоїти іншому. Треба виконати копіювання даного рядка , який займає певну ділянку памяті в іншу ділянку, де знаходиться рядок-копія.

Є дві функції strcpy() i strncpy(). Вони описані в файлі string.h, який необхідно підключити для їх використання.

Функція strcpy(). Копіює заданий рядок в задане місце памяті. ЇЇ прототип

char *strcpy(char *destination, const char *sourse);

Функція strcpy() копіює рядок, який знаходиться по адресу sourse (разом з завершаючим символом /0) в ділянку памяті, яка починається по адресу в вказівнику destination. Функція повертає вказівник на новий рядок destination.

До виклику функції необхідно виділити память для нового рядка. Сама функція не перевіряє, чи досить памяті по вказаній їй адресі. Якщо розподілу памяті не виконалося, то функція затре strlen(sourse) байт нової інформації, починаючи з адресу , вказаному в destination.

Функція strncpy().аналогічна функції strcpy(), тільки з її допломогою копіюється задана кількість символів.

Порівняння двох рядків. Функція strcmp() призначена для посимвольного порівняння двох рядків. Вона має прототип:

Int strcmp(const chart *str1, const chart *str2);

Аргументи вказують на порівнювані рядки str1 і str2. Функція повертає від'ємне значення , якщо str1 менше str2, — нуль, якщо str1 = str2 і додатнє значення, якщо str1 більше. str2.

Порівняння фрагментів двох рядків. Функція strcnmp() призначена для посимвольного порівняння фрагментів двох рядків довжиною n. Вона має прототип:

Int strcmp(const chart *str1, const chart *str2, size_t n);

Ця функція порівнює n символів рядків str1 і str2. Порівняння виконується до тих пір, поки не вичерпаються n символів, або не бу4де здосягнутий кінець рядка str1. Результат порівняння такий, як в попередній функції.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]