русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Рядки символів


Дата додавання: 2014-11-28; переглядів: 1032.


 

Символьний рядок - це масив типу char. Наприклад, оголосити рядкову змінну T і ініціалізувати її рядком "Ukraine Technology" можна в такий спосіб:

char T[] = "Ukraine Technology";

або так

char* T = "Ukraine Technology";

Обидва оголошення є еквівалентними.

Якщо рядок являється константою (у нашому прикладі це "Ukraine Technology"), в його кінець автоматично додається символ '\0', він відіграє роль ознаки кінця рядка. Рядки, які завершуються символом '\0', називають asciz-рядками.

Оголосити масив рядків з ініціалізацією кожного рядка заданим словом можна наступним чином:

char* A[20] = { "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота", "Неділя"

};

Число 20 у цьому оголошенні визначає найбільшу довжину рядка у байтах, який є елементом одновимірного масиву рядків.

Основними операціями, які найбільше часто доводиться програмувати для рядків є:

- операції введення/виведення;

- визначення кількості символів у рядку;

- копіювання символів з одного рядка в інший;

- конкатенація, тобто об’єднання двох рядків в один;

- пошук заданого символу в рядку;

- пошук входження рядка в рядок;

- лексикографічне порівняння рядків.

 

Введення/виведення рядків

Для програмування операцій консольного введення/виведення застосовуються функції scanf і printf з форматом %s . Частина програми, що наведена нижче, вводить рядок T із клавіатури і далі виводить його на екран для контролю:

char T[100];

scanf("%s",T);

printf("%s",T);

Якщо Ви вже зустрічалися з функцією scanf, зверніть увагу на те, що у другому рядку не треба писати scanf("%s",&T), бо T є ім’ям масиву і водночас покажчиком на нього, звідси значення T саме і є адресою області пам’яті, у яку виконується введення інформації за допомогою функції scanf.

Для виведення значень рядкових змінних на екран можна також використати стандартну процедуру консольного виведення рядка puts:

puts(T);

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

 

int strlen(char* s);

Повертає довжину рядка s. Довжина рядка визначається як кількість його символів, завершальний нуль-байт не враховується.

 

char* strcpy(char* dest, char* src);

Виконується копіювання символів з рядка src у рядок dest. Масив символів з адресою destповинен бути досить великим, щоб вміщувати всі символи з масиву src. Функція повертає адресу завершального нуль-байту в масиві dest після копіювання.

 

char* strcat(char* dest, char* src);

Функція виконує конкатенацію рядків: до рядка dest приєднується рядок src. Повертається покажчик на масив-результат dest. Розмір масиву символів з адресою dest повинен бути достатнім для виконання цієї операції.

 

char* strchr(char* s, int x);

Виконується пошук першого входження символу x у рядок s. Вертається адреса знайденого входження. Якщо символ x не знайдений, вертається значення NULL .

 

char* strstr(char* s1, char* s2);

Виконується пошук першого входження рядка символів s2 у рядок s1. Повертається адреса першого символу для знайденого входження або NULL, якщо входження не виявлене.

 

int strcmp(char* s1, char* s2);

Виконується лексикографічне порівняння рядків. Функція повертає значення:

-1, якщо s1 < s2 ,

0, якщо s1 == s2 ,

1, якщо s1 > s2 .

Лексикографічне відношення S1<S2 виконується, якщо рядок S1 у алфавітному порядку розташовується раніше, ніж рядок S2.

Розглянемо як приклад можливу реалізацію функції для копіювання asciiz-рядка символів. Наведена нижче функція працює точно так, як бібліотечна функція strcpy з модулю string.h.

 

// Приклад 1

char* scopy(char* D, char* S)

{ while (*D++ = *S++);

return D-1;

}

 

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

 

 

// Приклад 2

int len(char *s)

{ int L=1; while (*s++) L++;

return L;

}

 

 


<== попередня лекція | наступна лекція ==>
Глава 7 | Void main()


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн