Рядкові величини в С++ Максименко Марина Миколаївна вчитель інформатики вищої категорії, вчитель-методист Конотопської гімназії Конотопської міської ради Сумської області 2008 р.
Зміст Оголошення символьних рядків Ініціалізація символьного рядка Уведення та виведення рядків Передавання рядка у функції Приклади Завдання Вказівники і символьні рядки Функції для роботи з рядками Приклади Завдання Література
Оголошення символьних рядків Символьний рядок у С++ являє собою масив елементів типу char, який закінчується символом \0 (NULL). Масиви символів оголошуються так: char назва_рядка[довжина_рядка]; Наприклад: char a[32]; const int len=80; char str[len]; Оскільки рядки є масивами символів, то назва рядка є вказівником на його перший елемент. Увага! Символ NULL є одним з символів рядка. Тобто a – масив з елементами, пронумерованими a[0]…a[31] У програмах на С++ зустрічаються окремі символи, взяті в одинарні лапки (F), і символи у подвійних лапках (F). F – символьна константа, 1 байт пам'яті; F – рядкова константа, 2 байти пам'яті.
Ініціалізація символьного рядка С++ дозволяє ініціалізувати масиви при оголошенні: const char text[]=Ми вивчаємо програмування; char slovo[11]=University; char sl[]={U,n, i,v,e,r,s,i,t,y,\0}; char tit[32]=Hello, C++; Якщо кількість символів, що присвоюється рядку, менша від розміру масиву, більшість компіляторів С++ присвоюють символи NULL елементам рядкового масиву, що залишаються. Пізніше, в програмі, у цей масив можна буде вмістити довший рядок, обов'язково помістивши в кінці символ \0.
Уведення та виведення рядків Увести весь масив символів можна за допомогою команди: cin>>text; Увага! Якщо рядок даних містить символ пропуску, то ця команда зчитає дані лише до першого пропуску. Щоб зчитати весь рядок до символу вводу, необхідно застосувати команду: cin.get(str,80); Увага! Якщо використати цю команду двічі, то другій рядок не зчитається. Щоб уникнути таку помилку потрібно використати наступну серію команд: cin.get(str,80); cin.get(); cin.get(a,32); або команду cin.getline(str, 80,\n) Дія команди cin.getline(str, 80,\n) припиняється у випадках: Якщо зустрічається символ-обмежувач \n; Якщо уводиться вказівник кінця файлу; Якщо кількість уведених символів 79 (80-1). Аргумент функції \n можна не вказувати (значення за замовчуванням): cin.getline(str, 80) Виведення значення рядка на екран: cout<<text;
Передавання рядка у функції Передавання символьного рядка у функцію подібне до передавання будь-якого масиву як параметру. Наприклад: void show-ryad(char ryad[]) Не треба указувати розмір рядка. Замість цього функція може визначити останній елемент, просто знайшовши в масиві символ NULL
Приклади Ініціалізація рядків при оголошенні: #include int main() { char tit[32]=Hello, C++; char les[]=Simvolni ryadki; cout<<Book:<<tit<<endl; cout<<Lesson:<<les<<endl; getch(); return 0;} Передавання рядків у функції: #include void show_ryad(char ryad[]) {cout<<ryad<<endl;} int main() {show_ryad(Hello, C++); show_ryad(Simvolni ryadki); getch(); return 0;}
Приклади (продовження) Визначить кількість символів у рядку: #include int str_len(char ryad[]) {for (int i=0; ryad[i]!=\0; i++); return (i);} int main() {char tit[32]=Hello, C++; cout<<dlina tit=<<str_len(tit)<<endl; char les[]=Simvolni ryadki; cout<<dlina les=<<str_len(les)<<endl; getch(); return 0;} Заповнити рядок латинськими літерами та вивести його на екран: #include int main() { char abc[27]; char let; int i; for (let=A, i=0; let<=Z; let++,i++) abc[i]=let; abc[i]=\0; cout<<abc<<endl; getch(); return 0;}
Завдання 1. Виведіть маленькі літери латинського алфавіту. 2. Увести рядок символів та визначити його довжину 3. Увести фразу і вивести її в зворотному порядку 4. Нехай задано рядок Skoro budut kanikuli. Визначить її довжину. Вивести на екран друге слово.
Вказівники і символьні рядки Оголошення char *b; задає змінну b, що може містити адресу деякого об'єкта. Однак у цьому випадку компілятор не резервує місце для зберігання символів і не ініціалізує змінну b конкретним значенням. Зробить це можна, наприклад, присвоївши b вказівник на вже існуючий символьний масив або динамічно виділивши память під новий масив: char r[]=Hello, world!; char *b; b=&r[7]; *b=W; //b=World! char *s; s=new char[50]; cin>>s; int d=0; while (*s++)d++; cout<<d; delete[] s; //увести рядок та визначити його довжину
Функції для роботи з рядками Заголовковий файл strlen(s)кількість елементів у рядкузастосовується у виразах strcat(s1,s2)з'єднання рядківрезультат присвоює змінній s1 strncat(s1,s2,n)до змінної s1 додає перших n символів рядка s2 команда strcmp(s1,s2)Порівнює рядки. Повертає 0, якщо рядки рівні, число мене від нуля, якщо s1 s2 застосовується у виразах
Функції для роботи з рядками Заголовковий файл strcpy(s1,s2)копіює символи з рядка s2 в рядок s1 команда strncpy(s1,s2,n)копіює перших n символів рядка s2 в рядок s1 команда strchr(s1,a)визначає перше входження символу у рядок s1 так: повертає рядок, який починається від першого входження заданого символу до кінця рядка s1 застосовується у виразах strrchr(s1,a)визначає останнє входження символу у рядок s1 застосовується у виразах
Функції для роботи з рядками Заголовковий файл strspn(s1,s2)Визначає номер першого символу, який входить у рядок s1, але не входить у рядок s2 застосовується у виразах strtok(s1,s2)визначає частину рядка s1, яка закінчується перед першим однаковим символом рядків s1 та s2 застосовується у виразах strset(s1,a, n)вставляє n разів заданий символ перед рядком s1 застосовується у виразах
Функції для роботи з рядками Заголовковий файл strupr(s1)перетворює усі малі літери рядка у великі команда strlwr(s1)перетворює усі великі літери рядка у малі команда strrev(s1)записує рядок у зворотному порядку команда
Приклади char lviv[]=Львівська політехніка; un[30]=НУ; r1[30]=; char *p; int n;
Завдання 1. Увести рядок символів за допомогою вказівника і виділення динамічної пам'яті та визначити його довжину 2. Увести рядок символів та визначити його довжину з використанням функції strlen 3. Уведіть фразу х кількох слів і виведіть її в зворотному порядку 4. Нехай задано рядок Skoro budut kanikuli. Визначить її довжину. Вивести на екран друге слово. 5. Увести фразу, вилучіть з неї пропуски та коми, інші символи продублювати 6. Увести введені з клавіатури два слова і порівняти їх 7. Написати програму для підрахування кількості входжень у заданий текст символу x 8. Написати програму, яка перевірятиме, чи задане слово читається однаково з початку в кінець, і з кінця до початку
Література Лєхан С.Ф. Інформатика С++. Спецкурс класи. – Шепетівка; Аспект, Глинський Я.М., Анохін В.Є., Ряжська В.А. С++ і С++ Builder. Навчальний посібник. – Львів: СПД Глинський, Глушаков С.В., Смирнов С.В., Коваль А.В. Практикум по С++. – Харьков: Фолио, Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб.: Питер, 2003 Лисенко Т.І. Поглиблене вивчення програмування в школі. – К.:ТОВ Редакція Комп'ютер, 2007.