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

Функція strrchr

Функція strrchr здійснює пошук заданого символу з кінця рядка. Вона має наступний синтаксис:

char* strrchr (const char* string, int c )

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

Функція strspn

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

size_t strspn ( const char* string, const char* group)

Функція перевіряє кожний символ рядка string на відповідність кожному із символів рядка group. У результаті роботи функції вертається число символів, що збіглися.

Наступний приклад демонструє використання даної функції:

char S1 [ ] = "Завантаження параметрів БД" ;

char S2 [ ] = "Завантаження параметррррр" ;

cout << strspn ( S1, S2 ) ;

На екран буде виведене число 17, тому що символи рядка S1 і рядка S2 збігаються аж до 177й позиції. Наведена функція розрізняє регістр символів.

Функція strcspn

Функція strcspn має синтаксис:

size_t strcpn ( const char* str1, const char* str2 )

Ця функція зіставляє символи рядка str1 і str2 і повертає довжину рядка str1, що не входить в str2. Таким чином, можна визначити, у якій позиції відбувається перетинання двох символьних масивів:

char S [ ] = "abcdefghijk" ;

int index = strcspn ( str, "elf" ) ;

Змінна index одержить значення 4, тому що в цій позиції рядка мають перший загальний елемент.

Функція strpbrk

Функція strpbrk оголошена в такий спосіб:

char* strpbrk ( const char* str1, const char* str2)

Ця функція відшукує місце входження в рядок str1 кожного із символів рядка str2. Якщо символи знайдені, вертається місце першого входження будь-якого символу з str2 у рядок str1. А якщо ні, то функція повертає NULL. Нижче ілюструється використання функції strpbrk:

char S1 [ ] = "abcdefghijk" ;

char S2 [ ] = "ecb" ;

char* ps ;

ps = strpbrk ( S1, S2 ) ;

cout << ps << '\n' ;

У результаті буде виведена подстрока "bcdefghijk", тому що символ 'b' з рядка S2 зустрічається в рядку S1 раніше інших.

Пошук подстрок

При необхідності пошуку в одному рядку послідовності символів, заданої в іншому символьному масиві (подстроке, лексемі), стандартна бібліотека string.h пропонує скористатися одного з наступних функцій.

Функція strstr

Функція strstr описана в такий спосіб:

char* strstr ( const char* str, const char* substr)

Дана функція здійснює сканування рядка str і знаходить місце першого входження подстроки substr у рядок str. У випадку успішного пошуку функція strstr повертає вказівник на перший символ рядка str, починаючи з якого випливає точний збіг частини str обов'язково з усією лексемою substr. Якщо подстрока substr не знайдена в str, вертається NULL.

Наступний приклад показує використання функції strstr.

char S1 [81] ; // оголошення рядка

Chartooem ( "Проводиться пошук елемента", S1 ) ; // ініціалізація рядка

char S2 [81] ; // оголошення рядка

Chartooem ( "пошук", S2) ; // ініціалізація рядка

char* ps ; // оголошення вказівника на рядок

ps = strstr ( S1, S2 ) ; // ініціалізація вказівника на рядок

cout << ps << '\n' ; // вивід на екран "пошук елемента"

На екран буде виведено "пошук елемента", тому що подстрока, що втримується в S2, перебуває усередині рядка S1 і функція strstr установить вказівник ps на відповідний елемент символьного масиву S1.

Щоб знайти місце останнього входження подстроки в рядок, можна скористатися наступним прийманням: обидві рядки реверсируются за допомогою функції strrev, а потім отриманий результат аналізується у функції strstr.