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

Функція strtok

Функція 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 ) ;

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

Функції перетворення типу

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

Найменування

Короткий опис

atof

перетворить рядок символів у число із плаваючою крапкою

atoi

перетворить рядок символів у рядок типу int

atol

перетворить рядок символів у число типу long

strtod

перетворить рядок символів у число із плаваючою крапкою типу double

strtol

перетворить рядок символів у число типу long

strtoul

перетворить рядок символів у число типу unsigned long

ecvt

перетворить число із плаваючою крапкою типу double у рядок символів; десяткова крапка й знак числа не включаються в отриманий рядок; позиція крапки й знак числа вертаються окремо

fcvt

ідентично ecvt, але округляє отримане значення до заданого числа цифр

gcvt

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

itoa

перетворить число типу int у рядок символів

ltoa

перетворить число типу long у рядок символів

ultoa

перетворить число типу unsigned long у рядок символів

Найчастіше, дані функції використовуються для перетворення чисел, уведених у вигляді символьних рядків, у числову представлення, а також для виконання певних арифметичних операцій над ними й зворотне перетворення в рядок символів. Розглянемо самі широко використовувані з них.