Добавил:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
31.01.2021
Размер:
26.86 Кб
Скачать

Інформатика — Теорія — Основні функції обробки символьних даних    Автори

|

Контакти

|

Підсистема допомоги

|

Методичні вказівки

|

Анотація

|

Назад

   ІнформатикаОбробка символьних даних : Основні функції обробки символьних данихЗміст курсу

Вступ

Теорія

Вбудований тип 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

Соседние файлы в папке content