Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Рядки як масиви



У мові С рядок подається як одновимірний масив змінних типу char, останнім елементом якого автоматично є нульовий символ '\0'. Можливі кілька видів оголошень масиву символів. По-перше, це може бути абстрактний рядок без вказівки розміру масиву:

char name[] = "Andrey";

Тут число елементів масиву визначається автоматично й дорівнює 7 (з урахуванням останнього елемента '\0'). По-друге, масив символів може мати більше елементів, чим містить абстрактний рядок:

char name[10] = "Andrey";

Тут три останніх елементи масиву не використовуються. Нарешті, рядок може бути оголошений за допомогою покажчика. Перед використанням покажчика рядок вже повинен існувати, наприклад:

char name[] = "Andrey";

char *namePtr;

namePtr = name;

Відзначимо, що при присвоєнні покажчику адреси масиву не потрібно використати адресний оператор &, тому що ім'я масиву поводить себе подібно адреси.

10.1.4. Передача рядка у функцію

Якщо потрібно передати в деяку функцію рядок, то передається як параметр ім'я рядка-масиву або покажчик на рядок.

Використання імені масиву. Запишемо визначення функції, що друкує рядок, і виклик цієї функції:

void print(char client[]){

cout << "Name of client: " << client << endl;

}

...

int main(){

char client1[] = "Serg";

...

print(client1);

...

Використання покажчика на рядок. Якщо є покажчик на масив-рядок:

char *client1Ptr= client1;

то можна передати у функцію покажчик:

print(client1Ptr);

Результат буде тим же, як і при передачі імені масиву, оскільки масив передається у функцію через посилання, тобто через покажчик.

10.1.4. Уведення/виведення символів і рядків

Розглянемо функції, які призначені для уведення/виведення символів і рядків і належать до стандартної бібліотеки (заголовний файл stdio.h).

Уведення по одному символу з потоку введення – здійснюється із клавіатури за допомогою функції getchar(), що повертає код уведеного символу:

int getchar(void);

Виведення одного символу на екран – здійснюється функцією putchar(), параметром якої є код виведеного символу:

int putchar(int ch);

Уведення символу без відображення на екрані – здійснюється функцією getch() з бібліотеки conio. (заголовний файл conio.h).

char getch(void);

У цієї функції, як і в getchar немає параметру. Крім того, значення, що повертається функцією, може бути присвоєно символьній змінній типу char.

Уведення рядка символів із клавіатури – здійснюється функцією gets(), параметром якої є покажчик на початок того рядка, у який вводяться дані. Функція повертає той же самий покажчик:

char *gets(char *string);

Функція gets читає все, що набирається доти, поки не натиснута клавіша Enter. Ця функція дозволяє вводити пробіли, чим відрізняється від іншої функції введення scanf, що читає всі символи доти, поки не зустрінеться пробіл (табуляція, кінець рядка).

Виведення рядка символів на екран – здійснюється функцією puts(), параметром якої є покажчик на початок того рядка, з якого виводяться дані. Функція повертає кількість виведених символів:

int puts(char *string);

10.1.4. Функції обробки рядків

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

Табл. 10.2. Функції обробки рядків

Прототип Опис
int strlen(char*s) довжина рядка, але без нуль-символу кінця рядка
char *strcmp(char*s1, char*s2) порівнює рядки s1 і s2, повертає 0 (рівні), < 0 (s1<s2), > 0 (s1 > s2)
char *strcpy(char*s1, char*s2) копіювання рядка s2 у рядок s1; повертає s2
char *strcat(char*s1, char*s2) додає s2 до рядка s1; перший символ s2 записується поверх нуль-символу s1; повертає s1
char *strchr (char*s, char ch) пошук у рядку s першого входження символу ch

10.2. Постановка задачі

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

10.3. Варіанти

1. Вивести на екран таблицю ASCII (стовпці - три старших двійкових розряди таблиці ASCII, рядки - чотири молодших розряди).

2. Вивести на екран всі букви й цифри таблиці ASCII.

3. Вивести на екран таблицю ASCII, а також малі літери, код яких кратний 3.

4. Вивести на екран таблицю ASCII, а також прописні букви, код яких
кратний 5.

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

int num_lower(char *s);

6. Скласти програму, що підраховує число прописних букв у рядку, уведеного користувачем. Для цього написати функцію із прототипом:

int num_upper (char *s);

7. Скласти програму, що підраховує число слів у рядку, уведеного користувачем. Для цього написати функцію із прототипом:

int num_word (char *s);

8. Скласти програму, що підраховує число слів у рядку, уведеного користувачем. Для цього написати функцію із прототипом:

int num_word (char *s);

9. Скласти програму, що читає слово, уведене користувачем, і міняє порядок букв у слові на зворотний. Написати функцію обернення слова, що має прототип:

char * word_reverse(char *s);

10. Скласти програму, що визначає, чи є слово, уведене користувачем, паліндромом. Написати функцію, що повертає значення 0 (не паліндром) і 1 (паліндром) і яка має прототип:

int palindrome(char *s);

11. Скласти програму, що підраховує число слів у рядку, уведеному користувачем, а також формує масив з довжин слів.

12. Скласти програму, що видаляє всі пробіли в рядку, уведеному користувачем.

13. Скласти програму сортування масиву рядків, уведених користувачем. Використати функцію strcmp().

14. У масиві рядків, уведених користувачем, знайти перші входження символу 'm'. Використати функцію strchr().

15. У масиві рядків, уведених користувачем, знайти перші входження символів 's' і 'S'. Використати функції strchr(), tolower().

16. Скласти програму, що дозволяє для рядка, уведеного користувачем, визначати: (1) його довжину; (2) кількість цифр; (3) кількість букв. Вибір дії здійснюється за допомогою меню.

17. Скласти програму, що дозволяє для рядка, уведеного користувачем, визначати: (1) його довжину; (2) кількість слів; (3) кількість подвійних пробілів. Вибір дії здійснюється за допомогою меню.

18. Скласти програму, що дозволяє для двох рядків, уведених користувачем, виконати: (1) порівняння; (2) копіювання; (3) конкатенацію. Вибір дії здійснюється за допомогою меню.

19. Скласти програму, що додає до рядка пробіли ліворуч, роблячи довжину рядка рівної n. Якщо довжина вихідного рядка більше або дорівнює n, рядок не міняється. Написати функцію додавання пробілів, що має прототип:

void blank_left(char *s, int n);

20. Скласти програму, що додає до слова пробіли ліворуч і праворуч так, щоб центрувати слово й зробити його довжину рівною n. Якщо довжина слова більше або дорівнює n, слово не міняється. Якщо загальне число пробілів непарне, то праворуч ставиться додатковий пробіл. Написати функцію центрування слова, що має прототип:

void center(char *s, int n);

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

22. Скласти програму, що дозволяє для рядка, уведеного користувачем, визначити кількість слів, що починаються із прописної букви.

23. Скласти програму, що скорочує рядок на n символів. Якщо довжина вихідного рядка менше або дорівнює n, рядок не міняється. Написати функцію «скорочування» із прототипом:

void truncate(char *s, int n);

24. Скласти програму, що у рядку, уведеному користувачем, перетворить першу букву кожного слова в прописну. Написати функцію такого перетворення, що має прототип:

void capitalize(char *s);

25. Скласти програму, що у рядку, уведеному користувачем, підраховує число входжень того або іншого символу. Написати функцію count обчислення числа входжень у рядок s символу c:

int count(char *s, char c);

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

1. Для зберігання рядків використати статичні масиви.

2. Операції над рядками оформляти у вигляді окремих функцій.

10.5. Зміст звіту

1. Постановка задачі.

2. Варіант завдання.

3. Код програми.

4. Скріншот вікна з результатами роботи програми.

Література

1. Г. Шилдт. С++. Базовый курс. 3-е изд. М: Вильямс, 2005.

2. Дж. Либерти. Освой самостоятельно С++. 5-е изд. М: Вильямс, 2006.

3. В.В. Подбельский. Язык Си++. М.: Финансы и статистика. – 2005, 560 с.

4. Б.И. Березин, С.Б. Березин. Начальный курс С и С++. М.: Диалог-МИФИ. – 2000, 288 с.

5. Х. Дейтел, П. Дейтел. Как программировать на С++. М.:Бином, 2000.

6. Н. Культин. С/С++ в задачах и примерах. С.-Пб.: BHV. – 2005, 292 с.





Дата публикования: 2015-04-07; Прочитано: 1634 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...