Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_2_1_2б символы и строки.doc
Скачиваний:
2
Добавлен:
17.11.2019
Размер:
157.18 Кб
Скачать

Лабораторна робота 1.3 " Робота з рядковими типами на С#”

Лабораторна робота 3 робота з рядковими типами. Використання класів char, char[], string та stringbuilder у мові с#

Мета: набути умінь та навичок роботи з рядковими типами даних, навчитись використовувати відповідні класи C# у середовищі Microsoft Visual Studio 2008.

Призначення: засвоєння методів обробки даних рядкового типу на мові С#.

1.1. Завдання

Скласти консольну програму на мові С# у Visual Studio 2008 і включити до неї наступне:

1. (+2 бала) Запрограмувати оператори, які:

  1. Створюють змінні рядкових типів, котрі задовольняють умовам варіанту завдання відповідно Вашому номеру за журналом..

  2. Вводять з клавіатури прізвище, ім'я та по батькові.

  3. Визначають довжину введених рядків.

  4. Виконують дії відповідно варіанту завдання.

  5. Виводять результат на екран, до­давши до нього коментарі - студент якої спеціальності і групи виконав завдання.

Варіанти завдань

1. Вивести ім'я та кількість літер у третьому слові.

2. Визначити кількість літер "а" у прізвищі.

3. Вивести перші літери прізвища, імені та по батькові із крапками.

4. Вивести довжину прізвища та імені.

5. Вивести прізвище та ініціали.

6. Вивести ім'я та кількість літер у прізвищі.

7. Визначити кількість літер "а" в імені.

8. Вивести саме довге слово.

9. Видалити всі літери "а" та "о" із прізвища.

10. Вивести ім'я в стовпець.

11. Перевірити, чи починається хоча б одне зі слів з літери "В".

12. Всі літери "й" імені продублювати.

13. Вивести прізвище та кількість літер імені.

14. Вивести ім'я у зворотному порядку.

15. Вивести прізвище в стовпець.

16. Вивести ім'я, по батькові та кількість літер імені.

17. Вивести слово, що має найменшу кількість літер.

18. Вивести прізвище, ім'я, по батькові без пробілів, кількість літер імені.

19. Вивести довжини трьох слів.

20. Вивести ім'я та кількість літер прізвища.

21. Вивести ім'я, прізвище та сумарну довжину слів.

22. Кожну літеру імені продублювати.

23. Вивести прізвище у зворотному порядку.

24. Визначити кількість літер "а" та "о" в імені.

25. Вивести трете слово та кількість літер у прізвищі.

2. (+3 бала) Запрограмувати деякий спосіб шифрування тексту. Скласти програму для введення тексту, його шифрування, розшифровування та друку результатів.

При виконанні роботи користуватися конспектом лекції 1.3 та наведеними нижче довідковими матеріалами.

3.1. Рядкові типи даних

Коли говорять про рядковий тип, то звичайно розрізняють тип, що представляє:

- окремі символи - тип char;

- рядки постійної довжини - масив символів;

- рядки змінної довжини - тип string.

Символьний тип char являє собою окремий випадок рядків -Довжиною 1 символ.

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

3.2. Клас char

У мові С# є символьний клас Char, заснований на класі System.Char, який використовує двобайтне кодування Unicode подання символів. Символьну константу можна задавати:

- символом, вкладеним в одинарні ('А') лапки;

- escape-послідовністю ("виключеною послідовністю"), тобто колом символу - відповідною послідовністю текстових символі», що являють собою логічне кодування. Необхідність логічного кодування текстових знаків виникла тому, що деякі з текстових знаків у програ­мах, що працюють із текстом, мають спеціальне (керуюче) значення. Дня того, щоб використати ці знаки безпосередньо як текст, їх кодують специфічними для кожної системи escape-послідовностями, на­приклад, у С послідовності \n (символ переходу рядка), \t (символ табу­лювання) і т.д. використовуються при форматному виведенні);

- Unicode-послідовністю, що задає Unicode-код символу.

Приклади оголошення символьних змінних і роботи з ними:

static void Main(string[] args)

{

char ch1 = 'A'; // Символ

char ch2 = '\x5A'; // Шістнадцятковии код

char ch3 = '\u0058'; // Unicode-код

char VK = '\n'; // Escape - послідовність переклад рядка

char TAB = '\t'; // табуляція

char ch = new Char();

int code;

string s;

ch = ch1;

// перетворення символьного типу в тип int

code = ch;

ch1 = (char)(code + 1);

// перетворення символьного типу в рядок

s = ch1.ToString() + ch2.ToString() + ch3.ToString() + VK + TAB;

Console.WriteLine("s= {0},\t ch= {1}, \t code= {2}\n", s, ch, code);

for (int i = 1; i < 1150; i++)

{

ch1 = (char)(i);

Console.Write(ch1.ToString() + ' ');

}

Console.ReadKey();

}

Три символьні змінні ініціалізовані константами, значення яких задані трьома різними способами. Змінна ch оголошується як об'єкт, використовуючи new і виклик конструктора класу. Тип char, як і всі типи С#, є класом. Цей клас успадковує властивості і методи класу Object і мас велику кількість власних методів.

Явні або неявні перетворення між класами char й string відсутні, але, завдяки методу ToString, змінні типу char перетворяться в тип string.

У результаті роботи процедури рядок s, отриманий зчепленням трьох символів, перетворених у рядки, має значення BZX, змінна ch дорівнює А, а її код - змінна code = 65

Статичні методи і властивості класу Char наведені у таблиці 3.1.

Метол

Опис

1

2

GetNumericValue

Повертає чисельне значення символу, якщо він є цифрою, і (-1) у протилежному випадку

GetUnicodeCategory

Всі символи розділені на категорії. Метод повер­тає Unicode категорію символу

IsControl

Повертає true, якщо символ є керуючим

IsDigit

Повертає true, якщо символ є десятковою цифрою

IsLetter

Повертає true, якщо символ є літерою

IsLetterOrDigit

Повертає true, якщо символ є літерою або цифрою

IsLower

Повертає true, якщо символ заданий у нижньому регістрі

1

2

IsNumber

Повертає true, якщо символ є числом (десятко­вою або шістнадцятковою цифрою)

IsPunctuation

Повертає true, якщо символ є розділовим знаком

IsSeparator

Повертає true, якшо символ є роздільником

IsSurrogate

Деякі символи Unicode з кодом в інтервалі [0x1000, 0x10FFF] представляються двома 16-бітними "сурогатними" символами. Метод повер­тає true, якщо символ є сурогатним

IsUpper

Повертає true, якщо символ заданий у верхньому регістрі

IsWhiteSpace

Повертає true, якщо символ є "білим пробілом". До білих пробілів, крім пробілу, відносяться й інші символи, наприклад, символ кінця рядка та символ переводу каретки

Parse

Перетворить рядок у символ. При цьому рядок повинен складатися з одного символу, інакше виникне помилка

ToLower

Приводить символ до нижнього регістра

ToUpper

Приводить символ до верхнього регістра

MaxValue,

MinValue

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

Більшість статичних методів перевантажені. Вони можуть за­стосовуватися як до окремого символу, так і до рядка, для якого вказу­ється номер символу для застосування методу. Основну групу станов­лять методи is..., використовувані при розборі рядка.

Крім статичних методів, у класу Char є й динамічні. Більшість із них - це методи батьківського класу Object, успадковані й перевизначені в класі Char. Із власних динамічних методів варто відзначити метод CompareTo, що дозволяє проводити порівняння символів. Він відрізня­ється від методу Equal тим, що для незбіжних символів видає "відстань" між символами відповідно до їх упорядкованості у кодуванні Unicode.

Приклад

int dif;

char ch1, ch2;

Console.WriteLine( "\n Метод CompareTo");

ch1 = 'A'; ch2 = 'Z';

dif = ch1.CompareTo(ch2);

Console.WriteLine("Paсстояние между символами {0},{1} = {2}", ch1,ch2, dif);

ch1 = 'a'; ch2 = 'A';

dif = ch1.CompareTo(ch2);

Console.WriteLine("Расстояние между символами {0},{1} = {2}", ch1,ch2, dif);

ch1 = 'Я'; ch2 = 'А';

dif = ch1.CompareTo(ch2);

Console.WriteLine("Расстояние между символами {0},{1} = {2}", ch1,ch2, dif);

Результати виконання:

Метод CompareTo

Расстояние между символами A,Z = -25

Расстояние между символами a,A = 32

Расстояние между символами Я,А = 31

Аналізуючи ці результати, можна зрозуміти, що в кодуванні Unicode як латиниця, так і кирилиця щільно впаковані. Виключення становить російська літера "Ё" - велика й маленька - вони випадають із щільного кодування Малі літери в кодуванні безпосередньо сліду­ють за великими літерами. Відстань між алфавітами в кодуванні до­сить велика - російська літера "А" на 975 символів правіше в кодуванні, ніж відповідна літера в латинському алфавіті.