Робота з символами, рядками.

Сайт: Навчально-інформаційний портал НУБіП України
Курс: Програмування (КН). Ч2 ☑️
Книга: Робота з символами, рядками.
Надруковано: Гість-користувач
Дата: четвер, 9 квітня 2026, 19:05

Опис


1. Робота з символами, рядками.

У мові C для символів визначено тип char. Кожному символу відповідає число від 0 до 255, яке називається ASCII-кодом символу. Наприклад, символу 'A' відповідає число 65. Символами можна оперувати, як числами і, навпаки, змінні типу int можна інтерпретувати як символи (порівнювати з символами або друкувати як символи).

Робота із символами реалізується за допомогою стандартних функцій. Функції обробки символів визначають, чи являється цей символ цифрою, чи являється цей символ буквою та інше.  Для виклику функцій обробки символів необхідно підключити заголовний файл <ctype.h>. Такі функції оперують із символами як з цілими числами (символу відповідає код).

•Для зчитування одного символу з клавіатури передбачені функції getch(), getche() , getchar()
•Функція getch() повертає  символ, який зчитаний з консолі, але не виводить цей символ на екран.
•Функція getche() повертає  символ, який зчитаний з консолі та виводить цей символ на екран.
•Функція getchar() повертає  символ, який зчитаний з консолі та виводить цей символ на екран.

Приклад завдання. Розробити  програму, що дозволяє зчитувати символ з клавіатури і друкувати його на екран у двох форматах: як символ (формат "%c") і як число (формат "%d"). Це відбувається до тих пір, поки символ (а точніше його ASCII код) не буде дорівнює 48, тобто поки не буде натиснута клавіша 0.

#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;

}




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

Функція 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. Перетворення рядків

•char *strlwr (char*st); — перетворює символи рядка st верхнього регістра в символи нижнього регістра, при цьому ін­ші символи не враховуються
•char *strupr (char *st); — перетворює символи рядка st нижнього регістра в символи верхнього регістра, інші символи не враховуються
•char *strrev (char *st); — записує символи в рядку st у зворотному порядку (реверсує рядок)

#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. Функції копіювання рядків

•char strcpy (s, *st); — виконує операцію копіювання байтів рядка st у рядок s(включаючи  "\0"; повертає s), 
•char *strdup (const char *str); — виконує копіювання рядка str і повертає покажчик на рядок-копію
•char * strncpy (char *st1, const char *st2, int n); — вико­нує копіювання n символів з рядка st2 у st1 (рядок stlповинен бути більше або дорівнювати st2, інакше виникне помилка),

#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,



•char *strtok (char *st, const char *dlm); — розбиття рядка на лексеми (сегменти), обмежені символами, що входять до складу рядка dim. Цей параметр може містити будь-яку кіль­кість різних обмежників — ознак границь лексем, після виділення лексеми в рядок st поміщається символ «\0».

10. Робота з символами (відео)


11. Обробка символьних рядків (відео)


Доступність

Шрифти Шрифти

Розмір шрифта Розмір шрифта

1

Колір тексту Колір тексту

Колір тла Колір тла

Кернінг шрифтів Кернінг шрифтів

Видимість картинок Видимість картинок

Інтервал між літерами Інтервал між літерами

0

Висота рядка Висота рядка

1.2

Виділити посилання Виділити посилання

Вирівнювання тексту Вирівнювання тексту

Ширина абзацу Ширина абзацу

0