Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Функція strtok

Функція strstr

ПОШУК ПОДСТРОК

Функція 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 описана в такий спосіб:

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.

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

char* strtok ( char* str, const char* delim)

Ця функція виконує пошук у рядку str подстроки, обрамленої по обидва боки будь-яким символомдроздільником з рядка delim. У випадку успішного пошуку дана функція обрізає рядок str, поміщаючи символ '\0' у місці, де закінчується знайдена лексема. При повторному пошуку лексеми в зазначеному рядку str першим параметром слід указувати NULL. Тому що strtok модифікує рядокроригінал, рекомендується попередньо зберігати копію вихідного рядка. Наведений нижче приклад ілюструє вищесказане.

Припустимо, необхідно розбити пропозицію, наявне в строковому масиві, за словами й вивести кожне з них на екран.

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

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

char* Del="U.?!,"; // оголошення й ініціалізація вказівника на рядок,

// утримуючу набір роздільників

Chartooem ("Назвався груздем, нарікай на сябя!",S) ; // перетворення рядка

ps = strtok ( S, Del ) ; // ініціалізація вказівника на рядок адресою першого слова

if ( ps ) cout << ps << '\n' ; // якщо вказівник існує, виводить на екран перше слово

while ( ps ) // доти, поки вказівник існує

{

ps=strtok ( NULL, Del ) ; // вказівник одержує адресу чергового слова

if ( ps ) cout << ps << '\n' ; // якщо вказівник існує, виводить на екран чергове слово

}

У даній програмі оголошується підлягаюча аналізу рядок S, подстрока Del, що містить набір роздільників (Delimiters), і вказівник на символьний тип даних ps. Виклик функції strtok (S, Del) сканує рядок S і як тільки в ній зустрінеться будь-який символ, що входить у подстроку Delimiters ( у цьому випадку це символ пробілу), вказівник ps стане посилатися на початок вихідного рядка до знайденого символу. Тобто ps буде містити:

*ps = "Назвався" ;

Завдяки тому, що функція strtok поміщає в знайденім місці нуль-термінатор ('\0'), вихідний рядок модифікується. Таким чином, масив символів S прийме значення:

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

Здійснивши перевірку вказівника ps на існування в операторові if ( ps ), знайдене слово виводиться на екран. Далі в циклі за допомогою функції strtok перебуває останній нуль-термінатор рядка S:

ps = strtok ( NULL, Del ) ;

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


Читайте також:

  1. Бюджетування як функція фінансового контролінгу
  2. Виробництво та виробнича функція
  3. Виробництво та виробнича функція
  4. Виробнича функція з двома змінними факторами
  5. Виробнича функція з двома змінними факторами
  6. Виробнича функція з одним змінним фактором
  7. Виробнича функція з одним змінним фактором
  8. Гамма-функція
  9. Гіпофункція нейрогіпофіза
  10. Двофакторна виробнича функція
  11. Двофакторна виробнича функція.
  12. Державне регулювання як головна функція державного управління економікою, його форми й методи




Переглядів: 720

<== попередня сторінка | наступна сторінка ==>
Функція strcspn | Функції _atoi64

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.003 сек.