Роздрукувати сторінку
Главная \ Методичні вказівки \ Методичні вказівки \ 1654 Лабораторна робота №5 на тему Робота з символами і рядками

Лабораторна робота №5 на тему Робота з символами і рядками

« Назад

Лабораторна робота №5

Робота з символами і рядками

Мета роботи:

1. Робота з символами. Клас System.Char

2. Робота з рядками. Клас System.String

3. Робота з рядками.  Клас System.StringBuilder

4. Обробка помилок (виключень). Клас Exception

 

Методичні рекомендації до виконання лабораторної роботи

1. Прочитайте лекцію 6. Спробуйте відповісти на наведені в кінці лекції запитання. Виконайте приклади, розглянути в лекції.

2. Прочитайте цю лабораторну роботу та виконайте наведені в ній приклади (вони всі працездатні).

3. При виконанні завдань зверніть увагу, що тип даних charє вбудованим типом-значенням, а тип string є посилковим (динамічним) типом. Тому при роботі з цими типами необхідне явне приведення типів (з char до string і навпаки).

4. Зверніть також увагу на новий клас для роботи з рядками  System.StringBuilder і його відміну від класу  System.String.

5. Для поглибленого вивчення цього матеріалу прочитайте розділи 8 і 13 книги [2].

 

Приклади виконання завдань

1. Робота з символами. Клас System.Char

Символьний тип даних char представляє один символ. Це тип відноситься до вбудованих типів даних C# і відповідає стандартному класу Char бібліотеки .NET з простору імен System. У цьому класі визначені статичні методи для роботи з символами. Приклад 5.1. лекції 5 демонструє використання деяких методів цього класу. Приклад 5.3, наведений нижче, демонструє роботу з масивами символів.

Приклад 5.3

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text; 

namespace Lab5

{

    class Program

    {

        static void Main(string[] args)

        {

            char[] a = { 'm', 'a', 's', 's', 'i', 'v' };          // 1

            char[] b = "через тиждень у нас перший кредит".ToCharArray();// 2

            PrintArray( "масив а:", a );

            int pos = Array.IndexOf( a, 'm' );

            a[pos] = 'M';

            PrintArray( "Змінений масив а:", a );

            PrintArray( "Масив b:", b );

            Array.Reverse( b );

            PrintArray( "Змінений масив b:", b );

            Console.ReadKey();

        }

        public static void PrintArray( string header, Array a )

        {

            Console.WriteLine( header );

            foreach ( object x in a ) Console.Write( x );

            Console.WriteLine( "\n" );

        }

    }

} 

В цьому прикладі створюється два масиви типу char: a,b. Зверніть увагу, що в ініціалізаторі масиву b використовуються явне перетворення рядка в масив символів викликом методу ToCharArray().

Далі викликається метод PrintArray( "масив а:", a ). В цьому методі елементи масиву виводяться на консоль. Використовується цикл foreach.

В наступних операторах спочатку знаходиться індекс символу 'm' в масиві a, який замінюється символом M, і знову викликається метод PrintArray( "Змінений масив а:", a );

Після цього викликається PrintArray( "Масив b:", b );  для друку  масиву b. Потім викликається метод Array.Reverse( b ), який переставляє всі символу масиву у зворотньому порядку. Знову викликається метод PrintArray( "Змінений масив b:", b ); для виводу обернего масиву b.

 

2. Робота з рядками. Клас System.String

Тип string, призначений для роботи з рядками символів в кодуванні Unicode, є вбудованим посилковим типом C#. Йому відповідає базовий клас System.String бібліотеки .NET. В цьому класі є багато методів для роботи з рядками.
В лекції 5 наведено декілька прикладів для роботи з рядками. 
Розглянемо приклад 5.5, в якому з рядка виділяються окремі слова. Ця задача  часто зустрічається в програмах обробки тексту. 
 static void Main(string[] args)

        {

string words = "рядок, що містить декілька слів, а також знаки пунктуації: такі як двокрапка і крапка.";

          string [] split = words.Split(new Char [] {' ', ',', '.', ':'});

          foreach (string s in split)

          {

           if (s.Trim() != "")

           Console.WriteLine(s);

          }

          Console.ReadKey();

        }

В прикладі спочатку створюється рядок words і масив  split, в який записуються виділені слова. Метод Split повертає масив рядків з елементами - підрядками основного рядка, між якими знаходяться символи-роздільники. Ці символи  ми розмістили в масиві типу Char.  Далі в циклі для кожного слова  викликається метод Trim(), який видаляє пробільні символи з рядка. В нашому прикладі оператор
 if (s.Trim() != "")
перевіряє чи виділене слово не є пробілом. Якщо слово не пробіл, воно виводиться на консоль.

 

3. Робота з рядками.  Клас System.StringBuilder

При використанні методів класу String створюється копія рядка. Для роботи безпосередньо зі змістом рядка в пам'яті, в С# є спеціальний клас StringBuilder. Всі зміни, що вносяться до об'єкту цього класу, негайно відображаються в ньому, що ефективніше, ніж робота з копіями рядка.

Методи класу StringBuilder практично дублюють аналогічні методи класу String. Використання цього класу потребує менше ресурсів пам'яті, ніж для класу String.

 

4. Обробка помилок (виключень). Клас Exception

Для обробки програмних помилок (виключень) у мові С# використовується клас Exception.

В цьому прикладі в методі Power(int x, int n)обчислюється xn.  Значення x і n  вводяться з консолі. Для контролю введених даних використовується блок try... catch. 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Lab5

{

    class Program

    {

        static public double Power(int x, int n)

        {

            double z = 1;

            for (int i = 1; n >= i; i++)

            {

                z = z * x;

            }

            return z;

        }

        static void Main(string[] args)

        {

            int x;

            int n;

            try

            {

                Console.WriteLine("Enter x:");

                x = Convert.ToInt32(Console.ReadLine());

                if ((x >= 0) & (x <= 999))

                {

                    Console.WriteLine("Enter n:");

                    n = Convert.ToInt32(Console.ReadLine());

                    if ((n >= 1) & (n <= 100))

                    {

                        Console.WriteLine("The power n of x is {0}",

                        Power(x, n));

                        Console.ReadLine();

                    }

                    else

                    {

                        Console.WriteLine("Error : n must be in [1..100]");

                        Console.ReadLine();

                    }

                }

                else

                {

                    Console.WriteLine("Error : x must be in [0..999]");

                    Console.ReadLine();

                }

            }

            catch (Exception e)

            {

                Console.WriteLine("Error : Please enter a numeric argument.");

                Console.ReadLine();

            }

        }

    }

} 

В кінці лекції 6 наведено комплексний приклад реалізації консольного калькулятора з лексичним аналізом введеного виразу та обробкою можливих помилок.

Виконайте цей приклад (завдання 3), проаналізуйте код застосунку.

 

Варіанти завдань для Лабораторної роботи № 5

Номер варіанта відповідає номеру прізвища студента у списку групи

№ варі-анту

Зміст завдання

7

1. Є слово з помилкою Ітернетн. Виправити помилку шляхом перестановки символів 

2. Вихідний текст є реченням. Напишіть процедуру, що розділяє текст на слова.  Для представлення текстів використовуйте клас string. 

3. Ввести назву футбольного клубу. Вивести на консоль цю назву у стовпчик.

 

Література

1. Лекція 6

2. C# 2005 и платформа .Net 3.0 для профессионалов. Нейгел К., Ивьен Б. и др. –М.: ООО “И.Д. Вильямс", 2008. –1376 с.

3. Шилдт Г. С# 4.0: полное руководство. : Пер. с англ. — М. : ООО "И.Д. Вильямс", 2011. — 1056 с.

4. Д.М. Златопольский. Сборник задач по программированию. 2-е издание. // СПб.: БХВ-Петербург, 2007.-240 с.

З повагою ІЦ "KURSOVIKS"!