- •Операції з рядками Довідка з функцій. (Не для друку)
- •Визначення довжини рядків
- •Копіювання рядків
- •Функція strcpy
- •Функція strncpy
- •Функція strdup
- •Конкатенація рядків
- •Функція strсat
- •Функція strncat
- •Порівняння рядків
- •Функція strcmp
- •Функції stricmp, strcmpi
- •Функції CharToOem
- •Зміна порядку символів рядка На зворотній
- •Функції перевірки діапазону
- •Пошук символів
- •Функція strchr
- •Функція strrchr
- •Функція strspn
- •Функція strcspn
- •Функція strpbrk
- •Пошук подстрок
- •Функція strstr
- •Функція strtok
- •Функції перетворення типу
- •Перетворення рядка в число Функції atoi і atol
- •Функції _atoi64
- •Функції atof
- •Функції strtod
- •Перетворення числа в рядок Функції _itoa і _ltoa
- •Функція gcvt
Функції перевірки діапазону
На практиці досить широко використовуються функції перевірки приналежності символів якому-небудь діапазону, такі як isalnum, isalpha, isascii, isdigit і т.д., оголошені в заголовному файлі ctype.h. Синтаксис цих функцій має вигляд:
int isrange ( int c ) ;
Якщо параметр належить діапазону, то функція повертає число, більше нуля, а якщо ні, то – нуль. Нижче розглядається приклад використання цього виду функцій.
#include <ctype.h>
#include <iostream.h>
void main ()
{
char Age [4] ; // оголошення рядка із трьох символів, у якій зберігається вік
char S [81] ; // оголошення рядка повідомлень із вісімдесяти символів
unsigned int i ; // оголошення цілої змінної без знака - номер символу
for ( ; ; ) // нескінченний цикл
{
begin: // оголошення мітки – початок циклу
Chartooem ( "Ведіть свій вік, будь ласка ", S ) ;
cout << S ; // друк запрошення
cin.getline ( Age, 4 ) ; // уведення віку
for ( i=0 ; i<strlen ( Age ) ; i++) // для всіх символів рядка Age
{
if ( isalpha ( Age [ i ] ) ) // якщо i–й символ є буквою
{
Chartooem ( "\n\t\t Ви ввели букву, спробуйте знову \n\n", S ) ;
сout << S ; goto begin ; // друк повідомлення й перехід у початок циклу
}
if ( iscntrl ( Age [ i ] ) ) // якщо i–й символ є керуючим
{
Chartooem ( "\n\t\t Ви ввели керуючий символ, спробуйте знову \n\n", S) ;
cout<<S ; goto begin ; // друк повідомлення й перехід у початок циклу
}
if ( ispunct ( Age [ i ] ) ) // якщо i–й символ є символом пунктуації
{
Chartooem ( "\n\t\t Ви ввели символ пунктуації, спробуйте знову \n\n", S ) ;
cout<<S ; goto begin; // друк повідомлення й перехід у початок циклу
}
if ( ! isdigit ( Age [ i ] ) ) // якщо i–й символ не є цифрою
goto begin ; // перехід у початок циклу
}
Chartooem ( "\n\t\t Ваш вік: ", S ) ;
сout << S << Age << "\n\n" ; // друк віку
return 0 ; // вихід з функції
}
}
Тут користувачеві пропонується ввести свій вік. Функція cin.getline поміщає в рядок Age уведену послідовність ( до трьох) символів, після чого виконується перевірка всіх уведених елементів масиву на приналежність до літер, escape - послідовностей або символам пунктуації. Якщо результат відповідної перевірки позитивний, користувачеві пропонується ввести дані повторно. А якщо ні, то всі введені елементи рядки перевіряються на приналежність до цифрового набору даних. Якщо хоча б один із символів не задовольняє умові, що перевіряється, цикл уведення повторюється спочатку. Після коректного введення даних на екран виводиться повідомлення про вік користувача, і програма завершує роботу.
Пошук символів
Одна із задач, що часто зустрічаються, при роботі з рядками – пошук окремого символу або навіть групи символів. Бібліотека string.h пропонує широкий набір стандартних функцій.
Функція strchr
Функція знаходження символу в рядку strchr має наступний прототип:
char* strchr ( const char* string, int c )
Дана функція робить пошук символу з у рядку string і у випадку успішного пошуку повертає вказівник на місце першого входження символу в рядок. Якщо зазначений символ не знайдений, функція повертає NULL. Пошук символу здійснюється з початку рядка.
Нижче розглядається фрагмент, що здійснює пошук заданого символу в рядку.
char S [81] ; // оголошення рядка з вісімдесяти символів
char* ps ; // оголошення вказівника на рядок
Chartooem ( "Назвався U груздем, U нарікай U на U себе", S ) ; // ініціалізація рядка
cout << S << '\n' ; // вивід на екран вихідного рядка
ps = strchr ( S, 'U' ) ; // повертає вказівник на перший пробіл
while ( ps ) // доти, поки вказівник ps не рівний NULL
{
ps++ ; // збільшення вказівника на одиницю
cout << ps << '\n' ; // вивід на екран символів від знайденого пробілу до кінця рядка
ps = strchr ( ps, ' ' ) ; // пошук наступного пробілу
}
У результаті роботи програми вказівник ps буде вказувати спочатку на початок другого слова, потім третього і т.д. На екран будуть виведені наступні рядки:
Назвався груздем, нарікай на себе
груздем, нарікай на себе
нарікай на себе
на себе
себе