Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга6.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.45 Mб
Скачать

8.3 Функції перетворення буферів

Для роботи з масивом символів, що не має у кінці нульового байта, можна користуватися функціями перетворення буферів. Прототипи цих функцій знаходяться у файлі mem.h. Ці функції дозволяють присвоювати кожному байту в межах вказаного буфера задане значення, а також використовуються для порівняння вмісту двох буферів.

memcpy() – копіювання символів з одного буфера у другий, поки не буде скопійований заданий символ або не буде скопійовано визначену кількість символів

memcmp() – порівнює вказану кількість символів з двох буферів.

Розглянемо детальніше функцію memcpy():

void *memcpy(void *dst, const void *src, size_t n);

де dst – адреса буфера призначення

srс – адреса джерела

n – кількість байт для копіювання.Функція копіює n байт із області пам’яті, на яку вказує src, в область пам’яті, на яку вказує dst. Функція повертає адресу призначення dst.

memcpy() копіює вміст src в буфер dst, наприклад, так:

int i;

for(i = 0; i < n; i++)

((unsigned char*)dst)[i]=((unsigned char*)src)[i];

return dst;

8.4 Функції перевірки літер

У файлі ctype.h описано прототипи функцій, що призначені для перевірки літер. Ці функції повертають ненульове значення (істина), коли її аргумент задовольняє заданій умові або належить вказаному класу літер, та нуль в іншому випадку(табл 8.2).

Таблиця 8.2 – Функції перевірки літер

int islower(int с)

символ с є малою літерою;

int isupper(int c)

символ с є великою літерою;

int isalnum(int c)

символ с є буквою або цифрою;

int isalpha(int c)

символ с є буквою;

int tolower(int c)

перетворення літери у нижній регістр;

int strtol(int c)

перетворення рядка у довге ціле число;

Приклад 8.5. Дана програма перевіряє всі символи, прочитані з стандартного вхідного потоку stdin, і видає повідомлення про кожну малу літеру.

#include <ctype.h>

#include <stdio.h>

#include <conio.h>

int main(void)

{

char ch;

for(;;) {

ch = getch();

if(ch == '.') break;

if(islower(ch)) printf("%c is a small letter\n", ch);

else printf("%c isn't a small latter\n",ch);

}

return 0;

}

Результат роботи програми:

8.5 Операції з рядками

а) Рядки можна ініціалізувати при їх визначенні.

Приклад 8.6. Ініціалізація даних.

char S1[10] = ”123456789”;

char S2[] = ”Srting”’;

char S3[] = {‘1’,‘2’,‘3’,‘\0’};

В двох останніх випадках розмір рядків буде встановлений за кількістю символів;

б) Рядки можна вводити з клавіатури, не використовуючи при цьому оператора циклу, подібно звичайним масивам.

Приклад 8.7. Введення масиву.

char TeMa [20];

printf(“Введіть тему лабораторної роботи:\n”);

scanf(“%s”, TeMa);

Контрольні запитання

  1. Для чого потрібні рядки?

  2. Що таке нульовий символ?

  3. Наведіть приклад функцій, які працюють з рядками.

  4. Наведіть приклад функцій перевірки літер.

  5. Як звертатись до елементів рядка?

  6. Які операції можна виконувати з рядками?

  7. Наведіть приклади ініціалізації рядків.

  8. Що таке символьні константи?

  9. Для чого потрібні символьні константи?

  10. Чим відрізняється символ від рядка, який складається з 1 символу?

  11. Написати програму, яка зчитуватиме з клавіатури слово, і виводитиме на екран всі літери через пробіл.

  12. Написати програму, яка зчитуватиме з клавіатури слово, і виводитиме його на екран навпаки(з останньої літери до першої).

  13. Написати програму, яка зчитуватиме з клавіатури слово, і виводитиме на екран 1, якщо слово є паліндромом і 0 в іншому випадку.

  14. Написати програму, яка зчитуватиме з клавіатури 5 слів, і виводитиме на екран найдовше. Якщо таких кілька, то потрібно вивести перше по алфавітному порядку.

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