Перевірка та перетворення символів

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

Введення-виведення рядків

Розглянемо найбільш розповсюдженні бібліотечні функції gets() та puts( ).

Функція gets( ) отримує рядок з буфера клавіатури. Вона зчитує символи до тих пір, поки не зустріне символ нового рядка (‘\n’). Функція бере вcі символи до знака ‘\n’, приєднує до них нуль-символ та передає рядок програмі, що її визиває.

Приклад:

/* отримання імені * /

main ( )

{ char name [81]; /* виділення пам'яти*/

printf ("Як вас звуть? \n");

gets(name); /* ім'я поміщується до масиву name */

cout<<”Гарне ім’я”<<name<<”\n”;

Функція puts( ) виводить рядок символів на консоль виводу, у неї є тільки один аргумент - покажчик на рядок.

Приклад:

void main ( ) {

char str[]=”Приклад”;

puts (str);

}

Для використання наведених далі функцій необхідно додати до програми файл string.h:

#include <string.h>

Таблиця 5.2 – Функції для роботи з рядками

Функція Опис
char *strcat (st1, st2); char *st1, *st2; Використовується для злиття рядків символів. В результаті st2 заповнюється символами st1 та st2.
char *strnkat (st1, st2, n); char *st1, *st2; int n; Виконує злиття двох рядків так, що з другого рядка копіює не больш за n символів.
int strcmp (st1, st2); char *st1, *st2; Порівнює два рядка у лексикографічному порядку. Повертає 0, якщо st1=st2 -1, якщо st1<st2 1, якщо st1>st2  
int strncmp (st1, st2, n); char *st1, *st2; int n; Порівнює перші n символів двох рядків.
char *strcpy (st1, st2); char *st1, *st2; Копіює рядок st2 в st1.
char *strncpy (st1, st2, n); char *st1, *st2; int n; Копіює не більш ніж n символів рядка st2.
int strlen (str); char *str; Визначає довжину рядка, тобто кількість символів у рядку без завершаючого ‘0’.
char *strchr (str, c); char *str; int c; Знаходить у вказаному рядку перші входження символа с.
char *strrchr (str, c); char *str; int c; Знаходить у рядку останнє входження символа с.

 

Продовження таблиці 5.2

char *strpbrk (st1, st2); char *st1, *st2; Знаходить у рядку st1 деякий із множини символів, що входять до рядка st2.
char *strspn (st1, st2); char *st1, *st2; Визначає довжину відрізка рядка st1, що містить символи зі множини символів, що входять до рядка st2.
char *strtok (st1, st2); char *st1, *st2; Виділяє з рядка st1 лексеми, разподілені любим із множини символів, що входять до рядка st2.

Приклад:

/* використання функцій strcat( ) и strcpy( )*/

main ( )

{

static char name [80];

static char cpname [80];

static char add [] = “додано до кількості користувачів системи”;

printf(“Вкажіть ваше прізвище.\n”);

gets(name);

strcpy(cpname, name); /*копія прізвища*/

strcat(name, add);

puts(name);

puts(cpname);

puts(add);

}

 

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

Вкажіть ваше прізвище.

Іванов

Іванов додано до кількості користувачів системи

Іванов

додано до кількості користувачів системи

 

Файл ctype.h містить декілька макровизначень, що перевіряють, до якого класу належать символи.

Визначення:

int c;

 

Таблиця 5.3 – Функції перевірки належності символів

Функція Призначення
isalpha (c) перевіряє, чи с є символом літерою
isdigit (c) перевіряє, чи с є символом цифрою
islower (c) перевіряє, чи с є символом рядковою літерою
isspace (c) перевіряє, чи с є символом пустим символом (пробіл, табуляція чи новий рядок)
issuper (c) перевіряє, чи с є символом прописною літерою
isascii (c) перевіряє, чи с є символом кодом A S C I I
iscntrl (c) перевіряє, чи с є символом управляючим символом
ispunct (c) перевіряє, чи с є символом знаком пунктуації
isalnum (c) перевіряє, чи с є символом літерою чи цифрою

 

Приклад :

isalpha (‘s’)! = 0

isalpha (‘#’) = = 0

Функція isalpha(c) повертає ненульове значення (істина), якщо с є символом літери, та нуль (не істина) - у противному випадку. Перетворення символьних рядків:

atoi( ), atof( )

Функція atoi( ) перетворює рядок в ціле.

Функція atof( ) перетворює рядок в число із плаваючою точкою.

Система може мати зворотні функції: itoa( ) перетворює ціле в символьний рядок, а функція ftoa( ) число із плаваючою точкою в символьний рядок.

Приклад :

/*включення atoi( )*/

#include <stdio.h>

main( )

{

static char number [10];

int value;

puts(“Введіть ціле число”);

gеts(number);

value = atoi (number);

printf(“Число було%d\n”,value);

}

Функція atoi( ), ігноруючи початкові і кінцеві пропуски, обробляє цифри та алгебраїчний знак, якщо він є. Обробка ведеться до тих пір, поки обробляємий символ є цифрою чи знаком.

Функція atof( ) виконує ті ж самі дії для чисел із плаваючою точкою. Вона повертає тип double, саме тому повинна бути описана як double у використовуючий її програмі.

Кожному символу ставиться у відповідність ASCII-код. Таблиця ASCII-кодів наведена у додатку Д.