
1-1 Программирование С++ / html / modules / 018 / content / content4
.htmlІнформатика — Теорія — Основні функції обробки символьних даних Автори
|
Контакти
|
Підсистема допомоги
|
Методичні вказівки
|
Анотація
|
Назад
ІнформатикаОбробка символьних даних : Основні функції обробки символьних данихЗміст курсу
Вступ
Теорія
Вбудований тип char
Рядки, як символьні масиви
Функції введення-виведення символьних даних
Основні функції обробки символьних даних
Практика
Робота з рядками
Лабораторна робота
Поточна перевірка знань
Символьні дані
Версія для друку
Основні функції обробки символьних даних Стандартна бібліотека мови програмування С містить клас функцій для роботи з рядками, і всі вони починаються з літер str. Для того, щоб використовувати одну або декілька функції необхідно підключити файл string.h.#include<string.h> Для визначення довжини рядка використовується функція:size_t strlen(const char *s);.Функція strlen() повертає довжину рядка s, при цьому завершуючий нульовий символ не враховується.Наприклад,char *s= "Some string";int len;
len = strlen(s); // len == 11 Оператор встановить змінну len рівною довжині рядка, що адресується покажчиком Оператор присвоювання для рядків не визначений. Тому, якщо s1 і s2 - символьні масиви, то неможливо скопіювати один рядок в інший наступним чином.char s1[100];char s2[100];s1 = s2; // помилка Останній оператор (s1=s2;) не скомпілюється. Щоб скопіювати один рядок в інший необхідно викликати функцію копіювання рядків
char* strcpy(char* s1,char* s2).
Для двох покажчиків s1 і s2 типу char * операторstrcpy(s1,s2);копіює символи, що адресуються покажчиком s2 в пам'ять, що адресується покажчиком s1, включаючи завершуючі нулі. Для копіювання рядків можна використовувати і функцію, яка дозволяє обмежувати кількість символів, що копіюються: char* strcpy(char* s1,char* s2,int n).
Наприклад,
strncpy(destantion, source, 10);.
Наведений оператор скопіює 10 символів із рядка source в рядок destantion. Якщо символів в рядку source менше, ніж вказане число символів, що копіюються, то байти, що не використовуються встановлюються рівними нулю. Примітка. Функції роботи з рядками, в імені яких міститься додаткова літера n мають додатковий числовий параметр, що певним чином обмежує кількість символів, з якими працюватиме функція.
Скопіювати рядок можна за допомогою:
char *strdup (const char *str).
Функція виконує копіювання рядка str і повертає покажчик на рядок-копію, наприклад:
char *stl = "Слово - есть поступок.";
char *st2;
st2 =.strdup (stl); //копируется st1 в st2. Конкатенація двох рядків означає їх об'єднання, при цьому створюється новий, більш довгий рядок:
char* strcat(char *s1,char *s2).
Наприклад, при оголошенні рядка char first[80]= "Один ";оператор strcat(first, "два три чотири!");перетворить рядок first в рядок "Один два три чотири". Під час виклику функції strcat(s1,s2) потрібно впевнитися, що перший аргумент типу char * ініціалізований і має достатньо місця щоб зберегти результат. Якщо s1 адресує рядок, який вже записаний, а s2 адресує нульовий рядок, то операторstrcat(s1,s2); перезапише рядок s1. Функція strcat() повертає адресу рядка результату (що співпадає з її першим параметром), що дає можливість використати "каскад" декількох викликів функцій :strcat(strcat(s1,s2),s3);.Цей оператор додає рядок, що адресує s2, і рядок, що адресує s3, до кінця рядка, що адресує s1, що еквівалентно двом операторам:
strcat(s1,s2);strcat(s1,s3);
char *strncat (char *stl, const char *st2, int n);.
Функція додає до рядка stl n символів рядка st2 і додає знову в stl, наприклад:
char stl [90] = "Привiт ";
char st2 [50] = "студент i студентка";
stmcat (stl, st2, 7);,
в результаті маємо рядок:
stl = "Привіт студент ". Функція strcmp() призначена для порівняння двох рядків. Синтаксис функції :int strcmp(const char *s1, const char*s2);.Функція strcmp() порівнює рядки s1 і s2 і повертає значення 0, якщо рядки рівні, тобто містять одне й те ж число однакових символів. При порівнянні рядків ми розуміємо їх порівняння в лексикографічному порядку, приблизно так, як наприклад, в словнику. У функції насправді здійснюється посимвольне порівняння рядків. Кожний символ рядка s1 порівнюється з відповідним символом рядка s2. Якщо s1 лексикографічно більше s2, то функція strcmp() повертає додатне значення, якщо менше, то - від'ємне.
int stricmp.(const char *stl, const char *st2);.
Функція виконує порівняння рядків, не враховуючи регістра.символів; повертає цілу величину, як і функція -strcmp(), наприклад:
char sti[ ] = "Слово ";
char st2[ ] = "слово";
int k;
k = stricmp (stl, st2); //k==0;
int strncmp (char *stl, char *st2, int n);
Функція виконує порівняння рядків із заданою кількістю символів n у .stl i st2 і повертає цілу величину:
< 0 --- якщо stl<st2;
= 0 - якщо stl == st2;
>0 - якщо stl > st2;.
char *strnicmp (char *stl, char *st2, int n);.
Функція виконує порівняння рядків із заданою кількістю символів n у stl і st2, незалежно від регістра, і повертає цілу величину, як і в попередньому випадку.
Функції перетворення символів рядка.
char *strlwr (char*st);
Функція перетворює символи рядка st верхнього регістра в символи нижнього регістра, при цьому інші символи не враховуються. Наприклад:
сhar st [ ] = " Лазерний Прінтер";
strlwr (st); //st = " лазерний прінтер";.
char *strupr (char *st);.
Функція перетворює'символи рядка st нижнього регістра в символи верхнього регістра, інші символи не враховуються.
char *strrev (char *st);.
Функція записує символи в рядку st у зворотному порядку (реверсує рядок), наприклад:
char st [ ] = " Hello";
strrev (st); // st = " olleH" ;
Функції пошуку.
char *strchr (char *st, char c);.
Функція визначає перше входження символа c у рядок st; повертає покажчик на символ у рядку st, що відповідає введеному символу, наприклад:
char st [90] = " Borland C++5 "
char ^spt;
spt = strchr (st, *+'); - тепер покажчик spt вказує на підрядок "++5" рядка st.
char *strrchr (char *st, char c);.
Функція знаходить останнє входження символа c у рядок st; якщо символ c у рядку не виявлений, повертає 0, інакше повертає покажчик на останній символ у рядку st, що відповідає заданому зразку, наприклад:
char st [80] = "Borland C++5"; char *spt;
spt = strrchr (st, '+'); - покажчик spt вказує на підрядок "+5" рядка st.
strspn (const char *stl, const char *st2 );.
Функція повертає кількість символів від початку рядка stl, що збігаються із символами рядка st2, де б вони не знаходилися в st2, наприклад:
char stl [ J = "Borland C++5"; char st2 [ ] = " narlBod "; int k;
k = strspn (stl, st2);
змінна k одержує значення, що дорівнює 8, тому що перші 8 символів рядка містилися в stl (враховуючи символ пропуску).
char *strstr (const char *stl, const char *st2);.
Функція шукає в рядку stl перше входження st2 і повертає покажчик, на перший символ, знайдений у stl, з підрядка st2; якщо рядок st2 не виявлений в stl, функція повертає 0, наприклад:
char stl [ ] = "Привiт, сокурсник, підемо на іспит";
char st2[ ] = "сокурсник";
char *spt;
spt = strstr (stl, st2);
Результат виконання:
spt = "сокурсник, підемо на іспит".
За потреби визначення останнього входження можна спочатку реверсувати рядок за допомогою функції strrev.
char *strpbrk(const char *s1, const char *s2);.
Функція cканує перший рядок у пошуках першого входження будь-якого символу із другого рядка. Повертає покажчик на знайдений символ або 0 при невдач.
char *strtok (char *st, comst char *dim);.
Функція розбиття рядка на лексеми (сегменти), обмежені символами, що входять до складу рядка dim. Цей параметр може містити будь-яку кількість різних обмежників - ознак границь лексем, після виділення лексеми в рядок st поміщається символ «\0».Наступні виклики функції strtok() повинні бути з першим аргументом NULL. Вони будуть повертати покажчик на інші, наявні в st лексеми. Щоразу після завершення виділення лексеми у її кінці замість розділового символа поміщається символ «\0». Після того, як у рядку не залишиться жодної лексеми, функція повертає NULL. Для збереження вихідного рядка його треба записати в резервну змінну. Цю функцію зручно використовувати для розбиття речення на слова або будь-які інші сегменти.
char *strset(char *s, іnt ch);.
Функція пише символ ch замість всіх символів рядка. Повертає s.
char *strerror(sіze_t n);.
Функція повертає рядок повідомлення, який відповідає помилці з номером n.
voіd *memcpy(voіd *dst, voіd *src, sіze_t len);.
Функція копіює len байтів (включаючи нульовий) з src в dst. Повертає dst.
voіd *memove(voіd *dst, voіd *src, sіze_t len);.
Функція робить те ж, що й memcpy. Це - єдина функція, що по стандарті зобов'язана правильно копіювати об'єкти, що перекриваються.
іnt memcmp(voіd *s1, voіd *s2, sіze_t len);.
Функція - аналог strcmp, але з урахуванням нульових байтів.
voіd *memchr(voіd *s, іnt c, sіze_t len);.
Функція - аналог strchr, але з урахуванням нульових байтів.
voіd *memset(voіd *s, іnt c, sіze_t len);
Функція заповнює перші len байтів масиву s символом c.
Функції перетворення рядків у числа та чисел у рядки( знаходяться y файлі stdtib.h).
int atoi (const char *s);.
Функція перетворює рядок s y число типу int. Повертає отримане число або 0, якщо зустрінеться символ, що не може бути перетворений. Рядок повинен містити число, наприклад, «2345»,та мати таку структуру: [пропуски] [знак числа] [цифри].
long atoi (const сhаг *s);.
Функція перетворює рядок s у число типу long int (аналогічна функції atoi.).
double atof (const сhаг *s);.
Функція перетворює рядок символів у число з плаваючою крапкою типу double.. Якщо зустрічається символ, що не може бути перетворений, повертає 0. Оброблюваний рядок повинен мати таку структуру: [пропуски] [знак числа] [цифра.цифра] [літера e, E, d або D] [знак порядку] [цифри порядку], наприклад, «-12345.123» або «-12.345123E3».
char *ecvt (double vl, int n, int *dec, int *sign);.
Функція перетворює число vl у рядок символів, кількість яких дорівнює n символів цифр. Положення десяткової крапки від першої цифри числа повертається до змінної, на яку вказує dec. Знак числа повертається до змінної, на яку вказує sign. Якщо sign = 0, то число є додатним, інакше - від'ємним. Отриманий рядок зберігається у внутрішній пам'яті функції, покажчик повертається на початок сформованого рядка.
char *fcvt (double vl, int n, int *dec, int *sign);.
Функція аналогічна до попередньої функції char *ecvt(), але якщо для функції ecvt параметр dec задає загальну кількість цифр, то для функції fcvt - кількість цифр після десяткової крапки.
char *gcvt (double vl, int n, char *buf); - перетворює число vl у рядок, котрий поміщає в буфер, покажчик на початок якого є buf, n - число цифр у символічному записі.перетвореного числа. Отриманий рядок містить символ знака числа і десяткової крапки, якщо число містить менше десяткових цифр, ніж n. У цьому випадку молодша цифра дробової частини відкидається. Якщо перетворене число не можна помістити в задану кількість цифр n, функція генерує символьний запис в експоненціальній формі із символом E і знаком порядку. Функція повертає покажчик на початок сформованого рядка.
© 2008 ХНУРЭ, Інформатики, Сінельнікова Т.Ф., informatika@kture.Kharkov.uaРозроблено за допомогою LERSUS