Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ первый курс Alex Жив / C++ Перший курс / old / Lections 1 trim / Додаток до лекції №8 Рядки .doc
Скачиваний:
26
Добавлен:
23.03.2015
Размер:
199.17 Кб
Скачать

Функції перевірки діапазону

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

Назвався груздем, нарікай на себе

груздем, нарікай на себе

нарікай на себе

на себе

себе