Робота з рядками в С#. Клас String
Функції для роботи з рядковими величинами
Для роботи з рядковими величинами є стандартні властивості (поля) та методи (функції).
Розглянемо деякі з них.
Опрацювати теоретичний матеріал (Наводяться приклади введення і виведення даних в консольному режимі).
Рядки в С# - це об'єкти класу String, значенням яких є текст. Для роботи з рядками в цьому класі визначено безліч методів (функций).
Щоб використовувати рядок, його потрібно спочатку створити - приcвоїти яке-небудь значення, інакше ми отримаємо помилку: "Використання локальної змінної " [ім'я змінної] ", якій не присвоєно значення".
Оголосимо простий рядок і виведемо його на екран:
static void Main (string [] args)
{
string s = "Ми вивчаємо рядки";
Console.WriteLine (s);
}
Для об'єднання (конкатенації) рядків використовується оператор "+".
string s = "Ми - " + "майбутні програмісти!";
Оператор "[]" використовується для доступу (лише читання) до символу рядка за індексом:
string s = "Наша рідна школа - СЗШ № 8";
char c = s [0]; // 'Н'
char р = s [25]; // '8'
Властивість Length повертає довжину рядка.
Означає: Length(s) - 26
Пишеться: int n = s.Length;
Спецсимволи
Символ "\" є службовим, тому, щоб використовувати символ зворотного слеша необхідно вказувати його двічі "\\".
Символ табуляції - "\ t"
Символ переносу рядка - "\ r \ n"
Подвійні лапки - "\" "
Як перевірити, чи є один рядок "більшим" за інший?
Для порівнювання рядків використовується метод Compare(). Суть порівняння рядків полягає в тому, що перевіряється їх порядок (місце) щодо алфавіту. Рядок "a" "менше" рядка "b", "bb" "більший" рядка "ba". Якщо обидва рядки рівні - метод повертає "0", якщо перший рядок менший за другий - "-1", якщо перший більший за другий - "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");
Завдання практичної роботи
- Напишіть консольний додаток, який запитає в користувача рядок і виведе його на екран у зворотному порядку. Наприклад з рядка «задача» отримаємо рядок «ачадаз».
- Напишіть консольний додаток, який у введеному з клавіатури рядку замінить всі слова “no” на слова “yes”.
- Дано речення, в якому відсутні пробіли біля ком, тире та дужок. Змінити речення за такими правилами: 1) після коми поставити пробіл; 2) перед дужкою що відкривається поставити пробіл; 3) після дужки що відкривається поставити пробіл; 4) перед тире поставити пробіл; 5) після тире поставити пробіл.
Наприклад, у реченні пропущено пропуски після коми, перед та після дужок і в кінці речення стоїть крапка:
string a = "I'm a 10th grade student-I'm learning a programming language,modern(and complex).";
Console.WriteLine("Даний текст:");
Console.WriteLine(a);
int i = 0;
Console.WriteLine("1");
while (a.Substring(i, 1) != ".")
{
if (a.Substring(i, 1) == ",") a = a.Insert(i + 1, " ");
i++;
}
Console.WriteLine(a);