
- •Операції з рядками Довідка з функцій. (Не для друку)
- •Визначення довжини рядків
- •Копіювання рядків
- •Функція 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
Функція strdup
Функція strdup у якості параметра одержує вказівник на рядок джерело, здійснює розподіл пам'яті, копіює у відведену область рядок і повертає вказівник на початок отриманої рядка-копії. Синтаксис функції наступний:
char* strdup ( const char* source ) ;
У наступному прикладі проводиться копіювання рядка, на який вказує вказівник ps1, у рядок, на який вказує вказівник ps2:
char* ps1 = "File not found" ; // оголошення вказівника на символ,
// виділення пам'яті для рядка довжиною 14 символів і
// ініціалізація вказівника ps1 адресою цього рядка
char* ps2 ; // оголошення вказівника на символ
ps2 = strdup ( ps1 ) ; // виділення пам'яті для рядка довжиною 14 символів і
// ініціалізація вказівника ps2 адресою цього рядка
cout << ps2 << '\n' ; // вивід на екран рядка, на який вказує
// вказівник ps2: "File not found"
cout << strlen ( ps2 ) << '\n' ; // вивід на екран довжини рядка,
// на яку вказує вказівник ps2: "14"
Конкатенація рядків
Конкатенація (або приєднання) рядків досить часто використовується для створення нового рядка символів. Для цієї операції стандартна бібліотека пропонує функції strcat і strncat.
Функція strсat
Функція strсat має синтаксис:
char* strcat ( char* str1, const char* str2 ) ;
У результаті роботи функції вміст рядка, на який вказує str2, приєднується до вмісту рядка, на який посилається str1. вказівник, що вертається функцією, str1 вказує на результуючий рядок. При цьому розмір строкового масиву str1 повинна бути достатнім для зберігання об'єднаного рядка.
У наступному прикладі рядок S ініціалізується за допомогою функції копіювання strcpy і доповнюється рядком, використовуючи функцію strcat:
char S [26] ; // оголошення рядка довжиною 25 символів
strcpy ( S, "Press any key ") ; // ініціалізація рядка
cout << S << '\n' ; // вивід на екран рядка “Press any key ”
strcat ( S, "to continue") ; // додавання в кінець рядка “to continue”
cout << S << '\n' ; // вивід на екран рядка “Press any key to continue”
Функція strncat
Функція strncat також здійснює конкатенацію рядків, однак, приєднує лише зазначене в третьому параметрі кількість символів (беззнакове ціле): Функція strnсat має синтаксис:
char* strncat ( char* str1, const char* str2, size_t num) ;
Функція повертає вказівник на початок сформованого рядка str1. При цьому розмір строкового масиву str1 повинна бути достатнім для зберігання об'єднаного рядка. Наступний приклад робить конкатенацію рядка str1 із двома першими символами подстроки str2:
char S1 [31]="Press any key " ; // оголошення й ініціалізація
char S2 [31]="to continue" ; // двох рядків довжиною 30 символів
strncat ( S1, S2, 2 ) ; // додавання двох перших символів рядка S2 у кінець рядка S1
cout << S1 << '\n' ; // вивід на екран рядка “Press any key to”
Порівняння рядків
Бібліотека функцій string.h пропонує до використання готові функції, що виконують порівняння рядків. Із двох рядків менше та, у якої менше код першого незбіжного символу. Нижче приводяться функції, що виконують посимвольне порівняння двох рядків.
Функція strcmp
Ця функція робить порівняння рядків, розрізняючи прописні й малі літери. Функція strcmp має синтаксис:
int strcmp ( const char* str1, const char* str2 ) ;
У якості параметрів функція одержує вказівники на рядки, які рівняються. Після порівняння рядків str1 і str2 дана функція повертає в результаті одне з наступних значень:
< 0 - якщо рядок str1 менше, чим str2;
= 0 - якщо рядки еквівалентні;
> 0 - якщо рядок str2 більше, чим str2.
Наступний приклад ілюструє роботу функції strcmp:
char S1 [ ] = "Error" ; // оголошення й ініціалізація двох рядків
char S2 [ ] = "error" ;
int i = strcmp ( S1, S2 ) ; // оголошення змінної типу int і ініціалізація її
// результатом порівняння двох рядків
cout << "i = " << i << '\n' ; // вивід на екран “i = -1”
cout << S1 ; // вивід на екран “Error < error”
if ( i>0) cout << " > " ; else { if ( i<0) cout << " < " ; else cout<<" = "; }
cout << S2 << '\n' ;
У результаті змінної i буде привласнено негативне значення, тому що рядок з S1 менше, чим рядок з S2, з тієї причини, що прописні букви мають код символів менше, чим ті ж символи в нижньому регістрі.