Робота з символами, рядками.
| Сайт: | Навчально-інформаційний портал НУБіП України |
| Курс: | Програмування (КН). Ч2 ☑️ |
| Книга: | Робота з символами, рядками. |
| Надруковано: | Гість-користувач |
| Дата: | четвер, 9 квітня 2026, 19:05 |
Опис
1. Робота з символами, рядками.
У мові C для символів визначено тип char. Кожному символу відповідає число від 0 до 255, яке називається ASCII-кодом символу. Наприклад, символу 'A' відповідає число 65. Символами можна оперувати, як числами і, навпаки, змінні типу int можна інтерпретувати як символи (порівнювати з символами або друкувати як символи).
#include <stdio.h>
void main ()
{
char ch1;
do {
ch1=getch();
printf ("You enter %c. ASCII code = %d\n", ch1, (int)ch1);
} while (ch1 != 48);
}
#include <stdio.h>
void main ()
{
char ch1;
do {
ch1=getche();
printf ("\nYou enter %c. ASCII code = %d\n", ch1, (int)ch1);
} while (ch1 != 48);
getch();
}
2. Функції роботи з рядками
Рядком називається послідовність символів, з якими маніпулюють як з одним елементом. Рядок може містити букви, цифри, різні спеціальні символи, такі як +, -, /, ?, $ та інші.
В мові С рядкові літерали або рядки-константи обмежуються подвійними лапками: "Ігор Іванов", "03127, м. Київ", "(044) 258-1212".
З точки зору компілятора мови С, рядок – це масив символів, який завершується нульовим символом ('\0').
Доступ к рядку здійснюється за допомогою покажчика, який посилається на перший символ рядка. Таким чином, рядок подібний масиву, оскільки масив також є покажчиком на його перший елемент.
Рядок може бути присвоєний в об'яві або масиву символів, або покажчику на символ. Кожна з об'яв
char color [] = “yellow”;
char *ptrColor = “yellow”;
ініціює змінну рядком “yellow”.
Перша об'ява створює масив color, який складається з 7 елементів і містить символи ‘y',’e’, ’l’, ‘l', ‘o', ‘w', '\0'.
Друга об'ява створює змінну-покажчик ptrColor, яка містить адресу рядка “yellow", що знаходиться у деякому місці пам'яті.
При об'яві масивів символів для збереження рядка вони повинні мати достатній розмір, щоб вмістити і рядок, і обмежувальний нульовий символ.
Робота з рядками реалізується за допомогою стандартних функцій, які поділяються за їхнім призначенням на такі групи.
3. Введення рядків
Введення рядків:
scanf(“%s”, &str1);
Використання функції scanf () для введення рядка - працює, але це може призвести до переповнення буфера. Адже вхідний рядок може виявитися більше, ніж розмір рядка-буфера
Виведення рядків:
printnf(“%s”, str1);
#include <stdio.h>
#include <conio.h>
int main()
{ int i;
char myString[100];
printf( "input: " );
scanf("%s",&myString);
printf( "output: %s", myString );
getch();
return 0;
}

Функція gets() дозволяє читати рядок з клавіатури
Функція gets() читає рядок символів, введених з клавіатури і поміщає їх за адресою, вказаною в аргументі. Можна набирати символи, поки не буде натиснуто Enter. Символ, що відповідає клавіші Enter - повернення каретки, - не стане частиною рядка. Замість цього в кінці рядка з'явиться нульовий символ, і gets() закінчить роботу.
Якщо при введенні допущені помилки, то вони можуть бути виправлені натисканням на клавішу BACKSPASE перед натисканням введення.
Функція gets() має прототип:
char *gets(char *str);
де str - це масив символів. Функція gets() повертає покажчик на str.
#include <stdio.h>
#include <string.h>
int main()
{
char str[80];
printf("input string\n");
gets(str);
printf("Output string\n%s", str);
getch();
return 0;
}

Є проблема, пов'язана з gets() , про яку слід знати: використовуючи gets() , можна перейти межі масиву, з яким вона викликалася.
Це можливо, оскільки не існує способу вказати gets() , де знаходиться межа масиву. Наприклад, якщо викликати gets() з масивом довжиною в 40 байт, а потім ввести 40 або більше символів, то станеться вихід за межі масиву.
4. Виведення рядків
Функція puts() дозволяє виводити рядок на консоль (екран).
Функція puts() виводить аргумент, що отримала, на екран, завершуючи виведення перехідом на новий рядок.
Функція має такий прототип:
int puts(const char *str);
де str - це рядок, що потрєбує виведення
#include <stdio.h>
#include <string.h>
int main()
{
char str[80];
printf("input string\n");
gets(str);
printf("Output string\n");
puts(str);
getch();
return 0;
}

Функція повертає неціле число в разі успіху і EOF - в разі невдачі. Вона розуміє коди зі зворотним слешем, як printf(),наприклад \ t сприймається як табуляція.
Виклик функції puts()вимагає набагато менше процесорного часу на реалізацію, ніж printf() ,оскільки puts()виводить тільки рядок символів. Вона не може виводити числа або виконувати перетворення форматів.
5. Перетворення рядків
#include <stdio.h>
#include <string.h>
int main()
{
char str[80];
printf("Input string\n");
gets(str);
printf("Output strings\n");
puts(strlwr(str));
puts(strupr(str));
puts(strrev(str));
getch();
return 0;
}
6. Операції над рядками
Операція конкатенації
char *strcat (char *st1, const char *st2); — поєднує st1 і st2 та повертає st1
char *strncat (char *st1, const char *st2, int n); — додає до рядка st1 n символів рядка st2 і повертає знову в st1
#include <stdio.h>
#include <string.h>
int main()
{
char str1[80];
char str2[80];
printf("Input string 1\n");
gets(str1);
printf("Input string 2\n");
gets(str2);
printf("Output string\n");
puts(strcat(str1,str2));
puts(str1);
puts(str2);
getch();
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
char str1[80];
char str2[80];
printf("Input string 1\n");
gets(str1);
printf("Input string 2\n");
gets(str2);
printf("Output string\n");
puts(strncat(str1,str2,3));
puts(str1);
puts(str2);
getch();
return 0;
}
7. Функції копіювання рядків
#include <stdio.h>
#include <string.h>
int main()
{
int t;
char str1[80];
char *str3;
printf("Input string 1\n");
gets(str1);
printf(" string1\n");
puts(str1);
printf(" strdup(str1)\n");
str3=strdup(str1); //дублювання рядку
printf(" %s\n",str3);
printf(" string1\n");
puts(str1);
getch();
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
int t,i;
char str1[80];
char str2[80]="\0";
printf("Input string 1\n");
gets(str1);
printf(" string1\n");
puts(str1);
strncpy(str2,str1,5);
printf(" string2\n");
for (i=0;i<5;i++)
printf ("%c", str2[i]);
printf ("\n");
puts(str2);
getch();
return 0;
}
8. Порівняння рядків
int strcmp (char *stl, char *st2); — порівнює рядки st1 і st2 та повертає цілу величину, що дорівнює:
<0 — якщо st1 < st2;
= 0 — якщо st1 = st2;
>0 — якщо st1 > st2;
int stricmp (const char *stl, const char *st2); — виконує порівняння рядків, не враховуючи регістра символів; повертає цілу величину, як і функція strcmp(),
#include <stdio.h>
#include <string.h>
int main()
{
char str1[80];
char str2[80]="\0";
printf("Input string 1\n");
gets(str1);
printf("Input string 2\n");
gets(str2);
printf(" string1\n");
puts(str1);
printf(" string2\n");
puts(str2);
//t=strcmp(str1,str2);
t=stricmp(str1,str2);
printf ("\nt=%d",t);
getch();
return 0;
}
9. Пошук символів та рядків
Функції пошуку підрядка в рядку:
int strspn (const char *st1, const char *st2 ); — повертає кількість символів від початку рядка st1, що збігаються із символами рядка st2, де б вони не знаходилися в st2,
char *strstr (const char *st1, const char *st2); — функція шукає в рядку st1 перше входження st2 і повертає покажчик на перший символ, знайдений у st1, з підрядкаst2; якщо рядок st2 не виявлений в st1, функція повертає 0,
10. Робота з символами (відео)
11. Обробка символьних рядків (відео)
Шрифти
Розмір шрифта
Колір тексту
Колір тла
Кернінг шрифтів
Видимість картинок
Інтервал між літерами
Висота рядка
Виділити посилання
Вирівнювання тексту
Ширина абзацу