- •2. Основні елементи мови с
- •3.1 Алфавіт мови програмування
- •3.2Лексеми
- •3.3Ключові слова
- •3.4Ідентифікатори
- •3.5 Класифікація типів даних
- •3.6 Літерали
- •3.9 Директиви препроцесора
- •3.7 Оператори
- •3.8 Коментарі
- •3.10 Організація програми
- •3. Операції та вирази
- •4.1 Загальні відомості
- •4.2 Арифметичні операції
- •4.3 Операції приведення типів
- •(Тип) ідентифікатор,
- •4.4 Операції присвоєння
- •4.5 Операції інкремента і декремента
- •4.6 Операції порівняння
- •4.7 Операції зсуву
- •4.8 Порозрядні операції
- •4.9 Логічні операції
- •4.10 Операція sizeof
- •Sizeof ( Вираз ),
- •4.11 Операція послідовного обчислення
- •4.12 Операція умови (?:)
- •Операнд-1 ? Операнд-2 : Операнд-3
- •4.13 Адресні операції
- •Тип * ім'я_покажчика;
- •4. Прості типи даних
- •5.1 Оголошення змінних
- •[ Модифікатори ] тип ім’я_змінної;
- •5.2 Час існування та область видимості змінних
- •5.3 Цілі типи даних
- •5.4 Дійсні типи даних
- •5. Оператори керування
- •5.1 Оператор розгалуження if
- •If ( Вираз ) true-оператор;
- •5.2 Оператор розгалуження if-else
- •If ( Вираз ) true-оператор; else false-оператор;
- •5.3 Оператор множинного розгалуження switch
- •5.4 Оператор циклу for
- •For ( Вираз 1 ; Вираз 2 ; Вираз 3 ) тіло циклу
- •5.5 Оператор циклу while
- •While ( Вираз ) тіло циклу
- •5.6 Оператор циклу do while
- •Тіло циклу while ( Вираз ) ;
- •5.7 Оператор break
- •5.8 Оператор continue
- •6 Введення та виведення даних
- •7.1 Функція виведення printf
- •Int printf( стрічка форматування, змінна1, змінна2, ... );
- •7.2Функція введення scanf
- •Int scanf (стрічка форматування, адреса змінної1, адреса змінної2, ... );
- •9.1 Введення та виведення у файл
- •7 Масиви
- •7.1 Загальні поняття
- •7.2 Одновимірні масиви
- •Тип даних ім’я змінної [n];
- •7.3 Багатовимірні масиви
- •6. Функції
- •6.1 Основні поняття
- •{Тіло функції}
- •6.2 Область видимості
- •6.3 Порожній тип void
- •6.4 Передача аргументів у функцію
- •6.5 Рекурсивні функції
- •6.6 Прототипи функцій
- •8. Рядки в с
- •4.1 Прототипи
- •4.2 Функції перетворення буферів
- •4.3 Функції перевірки літер
- •4.4 Рядок символів
- •4.5 Операції з рядками:
- •4.6 Символьні константи
- •9. Покажчики
- •5.1 Визначення та ініціалізація покажчиків
- •5.2 Визначення покажчиків:
- •5.3 Масиви
- •5.6 Копіювання рядка
- •5.7 Посилання та оператор &
- •5.9 Посилання в якості результатів функції
- •5.10 Покажчики на функцію
- •Тип_функціі (* імя_покажчика) (специфікація_параметрів);
- •5.11 Покажчики на void
- •5.12 Арифметика покажчиків
- •10. Структури, об’єднання, перерахування
- •7.1 Структури
- •7.2 Ключове слово typedef
- •7.3 Об’єднання
- •7.4Перераховуваний тип (Enum)
- •Enum dataType
- •Enum day
- •11 Динамічне виділення пам'яті
8. Рядки в с
Рядки є одним з найбільш корисних та важливих типів даних мови С. Символьний рядок - це масив символів, замкнений у лапки. Він має тип char. Нульовий символ ‘\0’ автоматично додається останнім байтом символьного рядка та виконує роль ознаки його кінця.
Приклад 1. Символьний рядок.
#include <string>
int main (){
char myString[] = "string!";
printf("%s\n", myString);
system("pause");
return 0;
}
Результат роботи програми:
![]()
Кількість елементів у масиві дорівнює кількості символів у рядку плюс один, оскільки нульовий символ також є елементом масива. Кожна рядокова константа, навіть у випадку, коли вона ідентична іншій рядоковій константі, зберігається у окремому місці пам'яті. Якщо необхідно ввести у рядок символ лапок, то перед ним треба поставити символ зворотного слешу "\". У рядок можуть бути введені будь-які спеціальні символьні константи, перед якими стоїть символ "\"..
4.1 Прототипи
Прототипи всіх функцій, що працюють з рядками символів, містяться у файлі string.h. Всі функції працюють з рядками, що закінчуються нульовим символом. Деякі з них дивіться у таблиці 4.1.
Таблиця 4.1 – Прототипи функцій
|
Ім’я функції |
Виконання |
|
int strcmp(const char *, const char *); |
Лексикографічне порівняння рядків. Повертає < 0 якщо перша стрічка менша за другу; > 0 якщо друга стрічка більша за першу і 0, кщо вони рівні. |
|
int strcat( char *, char *) |
З'єднати два рядки(об’єднаний рядок записується у першу змінну, а друга змінна залишається без змін); |
|
int strcpy(char *, char *) |
Копіювати рядок s2 у рядок s1(перша змінна дорівнює другій, а друга залишається незмінною); |
|
int strlen(char *) |
Визначити довжину рядку (кількість символів без нульового символа). |
Приклад 2. Використання прототипів функцій.
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
char s1[]="Hello, ";
char s2[]={'w','o','r','l','d','!','\0'};
strcat(s1, s2);
printf("s1:%s s2:%s\n", s1, s2);/*на екран буде виведено:
s1:Hello, world! s2: world!*/
printf("%c\n", s1[4]);//на екран буде виведено літеру o
/*зверніть увагу, що в даному випадку використано %с
замість %s так як виводиться лише 1 символ*/
int len=strlen(s1);/*довжина першого рядка тепер дорівнює
13*/
printf("%i\n", strcmp(s1, s2));/*програма виведе від’ємне
число, так як s1<s2 за
лексикографічним порівнянням.*/
strcpy(s1, s2);
printf("%s %s %i\n", s1, s2, len); /*на екран буде виведено:
world! world! 13*/
system("pause");
}
Результат роботи програми:

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