Робота з рядками в С#. Клас String

Опрацювати теоретичний матеріал (Наводяться приклади введення і виведення даних в консольному режимі).

Рядки в С# - це об'єкти класу String, значенням яких є текст. Для роботи з рядками в цьому класі визначено безліч методів (функций).

Щоб використовувати рядок, його потрібно спочатку створити - приcвоїти яке-небудь значення, інакше ми отримаємо помилку: "Використання локальної змінної " [ім'я змінної] ", якій не присвоєно значення".

Оголосимо простий рядок і виведемо його на екран:

static void Main (string [] args)

{

   string s = "Ми вивчаємо рядки";

   Console.WriteLine (s);

}

 

Для об'єднання (конкатенації) рядків використовується оператор "+".

 string s = "Ми - " + "майбутні програмісти!";

Оператор "[]" використовується для доступу (лише читання) до символу рядка за індексом:

string s = "Наша рідна школа - СЗШ № 8";

char c = s [1]; // 'Н'

char р = s [26]; // '8'

Властивість Length повертає довжину рядка.

Означає: Length(s) - 26

Пишеться:  int n = s.Length;

Спецсимволи

Символ "\" є службовим, тому, щоб використовувати символ зворотного слеша необхідно вказувати його двічі "\\".

Символ табуляції - "\ t"

Символ переносу рядка - "\ r \ n"

Подвійні лапки - "\" "

Як перевірити, чи є один рядок "більшим" за інший?

Для порівнювання рядків використовується метод Compare(). Суть порівняння рядків полягає в тому, що перевіряється їх порядок (місце) щодо алфавіту. Рядок "a" "менше" рядка "b", "bb" "більший" рядка "ba". Якщо обидва рядки рівні - метод повертає "0", якщо перший рядок менший за другий - "-1", якщо перший більший за другий - "1": 

static void Main (string [] args)

{

   String.Compare ("a", "b"); // Повертає -1

   String.Compare ("a", "a"); // Повертає 0

   String.Compare ("b", "a"); // Повертає 1

   String.Compare ("ab", "abc"); // Повертає -1

}

Наприклад, дано два слова. Впорядкувати їх в алфавітному порядку

            string a, b;
            a = "Роман";
            b = "Богдан";
            Console.WriteLine("Дано два слова: {0}, {1}", a, b);
            Console.WriteLine("В алфавiтному порядку:");
            if (String.Compare (a, b)==-1)
                  Console.WriteLine("{0}, {1}", a, b);
            if (String.Compare(a, b) == 1)
                Console.WriteLine("{0}, {1}", b, a);

Як перевести весь рядок у верхній / нижній регістр?

Для цього використовуються методи ToUpper () і ToLower ():

static void Main (string [] args)

{

   string s = "Дорога моя мамо";

   Console.WriteLine (s.ToUpper ()); // Виводить "ДОРОГА МОЯ МАМО"

   Console.WriteLine (s.ToLower ()); // Виводить "дорога моя мамо"

  }

Як перевірити, чи містить рядок підрядок?

Для перевірки вмісту підрядка рядком використовується метод Contains(). Даний метод приймає один аргумент - підрядок. Повертає True, якщо рядок містить підрядок, в іншому випадку - False. Приклад:

static void Main (string [] args)

{

   string s = "Моє місто - Хмельницький";

    if (s.Contains ("Хмельницький"))

           Console.WriteLine ("Містить");

   Console.ReadLine ();

}

Дана програма виводить слово "Містить", так як "Моє місто - Хмельницький" містить підрядок "Хмельницький".

 Як знайти індекс першого символу підрядка, який містить рядок?

Метод IndexOf() повертає індекс першого символу підрядка, який містить рядок. Даний метод приймає один аргумент - підрядок. Якщо рядок не містить підрядка, метод повертає "-1". Приклад:

 static void Main (string [] args)

{

   string s = "Hello, World";

   Console.WriteLine (s.IndexOf ("H")); // 0

   Console.WriteLine (s.IndexOf ("World")); // 7

   Console.WriteLine (s.IndexOf ("Zoo")); // -1

   Console.ReadLine ();

}

Приклад

             string a="Моє місто - Хмельницький";
            Console.Write("У текстi: \r\n Моe мiсто - Хмельницький \r\n слово Хмельницький починається iз символу X \r\n з iндексом ");
            Console.WriteLine (a.IndexOf ("Хмельницький"));

Як дізнатися, починається / закінчується чи рядок зазначеної підрядком?

Для цього використовуються відповідно методи StartsWith() і EndsWith(), які повертають логічне значення. Приклад:

static void Main (string [] args)

{

   string s = "Hello, World";

   Console.WriteLine (s.StartsWith ("Hello")); // True

   Console.WriteLine (s.StartsWith ("World")); // False

   Console.WriteLine (s.EndsWith ("World")); // True

   Console.ReadLine ();

}

Наприклад:

            string a="Ми програмуемо";
            Console.WriteLine("Дано текст: Ми програмуемо");
            if (a.StartsWith ("Ми"))
                  Console.WriteLine ("Текст починається iз слова Ми");
            if (a.EndsWith("програмуемо"))
                Console.WriteLine("Текст закiнчується словом програмуемо");

Як вставити підрядок в рядок, починаючи з вказаної позиції?

Метод Insert () використовується для вставки підрядка в рядок, починаючи з вказаної позиції. Даний метод приймає два аргументи - позиція і підрядок. Приклад:

 static void Main (string [] args)

{

   string s = "Hello World";

   Console.WriteLine (s.Insert (5, ",")); // Вставляє кому на 5 позицію

   Console.ReadLine ();

}

Як обрізати рядок, починаючи з вказаної позиції?

Метод Remove() приймає один аргумент - позиція, починаючи з якої обрізається рядок:

static void Main (string [] args)

{

   string s = "Hello, World";

   Console.WriteLine (s.Remove (5)); // Видаляємо всі символи, починаючи з 5 позиції, на екран виведеться "Hello"

   Console.ReadLine ();

}

У метод Remove () можна передати і другий аргумент - кількість обрізаних символів. Remove (3, 5) - видалить з рядка п`ять символів починаючи з третього.

 Як отримати підрядок з рядка, починаючи з вказаної позиції?

Для цього використовується метод Substring(). Він приймає один аргумент - позиція, з якою буде починатися нова підстрока:

static void Main (string [] args)

{

   string s = "Hello, World";

   Console.WriteLine (s.Substring (7)); // Отримуємо рядок починаючи з 7 позиції, виведе "World"

   Console.ReadLine ();

}

У метод Substring (), як в метод Remove () можна передати і другий аргумент - довжина підрядка. Substring (3, 5) - поверне підрядок довжиною в 5 символів починаючи з третього позиції рядка.

Наприклад:

string a,b,c,d,e;
            a="ромашка";
            b = "орхідея";
            c = "мальви";
            d = "барвінок";
            e = a.Substring(0, 1) + b.Substring(0, 1) + c.Substring(0, 1) + d.Substring(0, 1);
            Console.WriteLine("{0}",e);

Результат виконання програмного коду: ромб.

Як замінити в рядку всі підрядки зазначеного нового підрядка?

Метод Replace() приймає два аргументи - підрядок, який потрібно замінити і новий підрядок, на який буде замінена перший:

 static void Main (string [] args)

{

   string s = "Hello, World, Hello";

   Console.WriteLine (s.Replace ("Hello", "World")); // виведе "World, World, World"

   Console.ReadLine ();

}

Наприклад:

string s = "Бармалей - хороший хлопчик";
Console.WriteLine(s.Replace("Бармалей", "Буратiно")); 

Результат:  Буратiно - хороший хлопчик

Як перетворити рядок в масив символів?

Метод ToCharArray () повертає масив символів зазначеного рядкя:

static void Main (string [] args)

{

   string s = "Hello, World";

   char [] array = s.ToCharArray (); // Елементи масиву - 'H', 'e', ​​'l', 'l' ...

}

Як розбити рядок за вказаною символу на масив підрядків?

Метод Split () приймає один аргумент - символ, за яким буде розбитий рядок. Повертає масив рядків. Приклад:

static void Main (string [] args)

{

   string s = "Arsenal, Milan, Real Madrid, Barcelona";

   string [] array = s.Split (','); // Елементи масиву - "Arsenal", "Milan", "Real Madrid", "Barcelona"

}

Первинне застосування вивченого матеріалу. Опорні задачі

1. Ввести день, місяць, рік народження. Вивести  дату народження одним реченням.

private void button1_Click(object sender, EventArgs e)
        {
            int data = int.Parse(textBox1.Text);
            string month=textBox2.Text;
            string year = textBox3.Text;
            textBox4.Text = data + " " + month + " " + year;
        }

2. За введеним прізвищем, іменем та по батькові вивести прізвище з ініціалами

private void button1_Click(object sender, EventArgs e)
        {
            string pr, name,pb,data;
            pr = textBox1.Text;
            name = textBox2.Text;
            pb = textBox3.Text;
            data = pr + " " + name.Substring(0, 1) + ". " + pb.Substring(0, 1)+".";
            textBox4.Text = data;
        }

3. Змінено порядок літер у парах

private void button1_Click(object sender, EventArgs e)
        {
            string a = textBox1.Text;
            string b = a.Substring(1, 1) + a.Substring(0, 1) + a.Substring(3, 1) + a.Substring(2, 1);
            textBox2.Text = b;
        }

4. Після кожної літери додано останню літеру слова

private void button1_Click(object sender, EventArgs e)
        {
            string a = textBox1.Text;
            string b = a.Substring(0, 1) + a.Substring(4, 1) + a.Substring(1, 1) + a.Substring(4, 1) + a.Substring(2, 1) + a.Substring(4, 1) + a.Substring(3, 1) + a.Substring(4, 1);
            textBox2.Text = b;
        }

5. Вивести розклад тризначного числа на розрядні одиниці у вигляді суми

private void button1_Click(object sender, EventArgs e)
        {
            int n=int.Parse(textBox1.Text);
            int sot, des, od;
            sot = n / 100;
            textBox2.Text = sot.ToString();
            n = n - sot * 100;
            des = n / 10;
            textBox3.Text = des.ToString();
            od = n - des * 10;
            textBox4.Text = od.ToString();
            string a = sot + "*100+" + des + "*10+" + od;
            textBox5.Text = a;
        }

Тренувальні вправи

1. Дано слово «інформатика». З букв даного слова створити три нових слова

private void button1_Click(object sender, EventArgs e)
        {
            String a = "інформатика";

            String b, c, d;

            b = a.Substring(2, 5);

            textBox2.Text = b.ToString();

            c = a.Substring(5, 4);

            textBox3.Text = c.ToString();

            d = a.Substring(4, 1) + a.Substring(6, 1) + a.Substring(5, 2);

            textBox4.Text = d.ToString();
        }

2. Ввести два різні слова. Вивести  їх одним реченням, починаючи з другого слова.

private void button1_Click(object sender, EventArgs e)
        {
            String a = textBox2.Text;
            String b = textBox3.Text;
            String c = a.Insert(0, b);
            textBox4.Text = c;
        }

3.  Задайте текст із буквами "а". В тексті кожну букву «а» подвоїти.

private void button1_Click(object sender, EventArgs e)
        {
            String a=textBox1.Text;
            String b, c, d;
            b = "a";
            c = "aa";
            d = a.Replace(b, c);
            textBox2.Text = d;
        }

4.

private void button1_Click(object sender, EventArgs e)
        {
            String a = "month February year";
            String b, c;
            b = "2018 ";
            c = a.Insert(15, b);
            textBox3.Text = c;
        }

5.

private void button1_Click(object sender, EventArgs e)
        {
            String a = textBox1.Text;
            String b = "";
            int n = a.Length;
            for (int i = 0; i < n; i++) 
                b = b + a.Substring(i, 1) + a.Substring(i, 1);
            textBox2.Text = b;
        }

6. У даному тексті введене прізвище та ім'я. Створіть дві змінні,  значення яких відповідає вашому прізвищу та вашому імені відповідно.

private void button1_Click(object sender, EventArgs e)
        {
            String text = textBox1.Text;
            String pr, name;
            String a = " ";
            int m = 0;
            int n = text.Length;
            // шукаємо позицію пропуску
            for (int i = 0; i < n; i++)
            {
                if (text.Substring(i, 1) == a) m = i;
            }
            // Вирізаємо слова у реченні
            pr = text.Substring(0, m);
            name = text.Substring(m + 1, n - (m + 1));
            textBox2.Text = pr;
            textBox3.Text = name;
        }

7. Ввести три імені. Серед  даних імен вибрати ті, що починаються з букви «К» і вивести їх.

private void button1_Click(object sender, EventArgs e)
        {
            String a = textBox1.Text;
            String b = textBox2.Text;
            String c = textBox3.Text;
            String d = "K";
            if (a.Substring(0, 1)==d) textBox4.Text=a;
            if (b.Substring(0, 1) == d) textBox5.Text=b;
            if (c.Substring(0, 1) == d) textBox6.Text=c;
        }

8. Читання слова у зворотному порядку (без використання циклу)

string a, b;
            a = textBox1.Text;
            b = a.Substring(3, 1) + a.Substring(2, 1) + a.Substring(1, 1) + a.Substring(0, 1);
            textBox2.Text = b;

Консольний режим. Застосування циклу до читання довільного слова навпаки

           string a, b;
            Console.Write("Ввести довiльне слово ");
            a = Console.ReadLine();
            int n = a.Length;
            b = "";
            for (int i = n-1; i >=0; i--)
                b = b+ a.Substring(i, 1);
            Console.WriteLine(b);

9. Перевірити, чи дане слово є паліндромом (читається однаково зліва направо і справа вліво). 

            string a, b;
            Console.Write("Ввести довiльне слово ");
            a = Console.ReadLine();
            int n = a.Length;
            b = "";
            for (int i = n-1; i >=0; i--)
                b = b+ a.Substring(i, 1);
            if (a == b)
                Console.WriteLine("Так");
            else Console.WriteLine("Нi");