Перевірка та перетворення символів
Операції над рядками
Введення-виведення рядків
Розглянемо найбільш розповсюдженні бібліотечні функції 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-кодів наведена у додатку Д.