Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

Информатика, программирование->Практическая работа
Язык программирования ПАСКАЛЬ, названный в честь французского учёного Блёза Паскаля, разработан профессором Института Швейцарской высшей политехническ...полностью>>
Информатика, программирование->Реферат
При работе с файловой системой, скопировав файл, папку, группу, их можно многократно вставлять в различные активные окна папок, пока в буфер не помест...полностью>>
Информатика, программирование->Реферат
Любому современному программисту, который желает идти в ногу с последними веяниями, каждые несколько лет приходится переучиваться. Языки (C++, Visual ...полностью>>
Информатика, программирование->Реферат
При створенні документів, що містять науковий текст часто виникає потреба у написанні складних математичних (фізичних, хімічних, економічних і т.д.) ф...полностью>>

Главная > Лекция >Информатика, программирование

Сохрани ссылку в одной из сетей:

Операції над рядками

Над рядками цього класу визначені практично ті ж операції з тією же семантикою, що й над рядками класу String, однак, операція конкатенації (+) не визначена над рядками класу StringBuilder, її роль грає метод Append, що дописує новий рядок у хвіст уже існуючої.

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

Приклад:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace String3

{

class Program

{

static void Main(string[] args)

{

//Рядка класу StringBuilder

//операції над рядками

StringBuilder s1 = new StringBuilder("ABC"),

s2 = new StringBuilder("CDE");

StringBuilder s3 = new StringBuilder();

//s3= s1+s2;

s3 = s1.Append(s2);

bool b1 = (s1 == s3);

char cH2 = s1[0], cH3 = s2[0];

Console.WriteLine("s1={0}, s2={1}, b1={2}," +

"cH2={3}, cH3={4}", s1, s2, b1, cH2, cH3);

s2 = s1;

b1 = (s1 != s2);

cH3 = s2[0];

Console.WriteLine("s1={0}, s2={1}, b1={2}," +

"cH2={3}, cH3={4}", s1, s2, b1, cH2, cH3);

StringBuilder s = new StringBuilder("Zenon");

s[0] = 'L';

Console.WriteLine(s);

}

}

}

Цей приклад демонструє можливість виконання над рядками класу StringBuilder тих же операцій, що й над рядками класу String. У результаті присвоювання створюється додаткове посилання на об'єкт, операції перевірки на еквівалентність працюють зі значеннями рядків, а не з посиланнями на них. Конкатенацію можна замінити викликом методу Append. З'являється нова можливість - змінювати окремі символи рядка. Для того щоб ім'я класу StringBuilder стало доступним, у проект додана пропозиція using System.Text, що посилається на відповідний простір імен. Результати роботи представлені на рис.17.2.

Рис.17. 2. Результати роботи програми

Основні методи й властивості

У класу є основні методи, що дозволяють виконувати такі операції над рядком як вставка, видалення й заміна підрядків, але немає методів, подібних до пошуку входження, які можна виконувати над звичайними рядками. Технологія роботи звичайно така: конструюється рядок класу StringBuilder; виконуються операції, що вимагають зміну значення; отриманий рядок перетвориться в рядок класу String; над цим рядком виконуються операції, що не вимагають зміни значення рядка. У класу StringBuilder немає статичних методів. Всі його методи - динамічні.

Основні методи класу StringBuilder:

public StringBuilder Append (<об'єкт>). До рядка, що викликала метод, приєднується рядок, отриманий з об'єкта, що переданий методу як параметр. Метод перевантажений і може приймати на вході об'єкти всіх простих типів, починаючи від char й bool до string й long. Оскільки об'єкти всіх цих типів мають метод ToString, завжди є можливість перетворити об'єкт у рядок, що і приєднується до вихідного рядка. Як результат повертається посилання на об'єкт, що викликав метод. Оскільки повертає ссилку, що, нічому привласнювати не потрібно, те вірніше вважати, що метод змінює значення рядка;

public StringBuilder Insert (int location,<об'єкт>). Метод вставляє рядок, отриманий з об'єкта, у позицію, зазначену параметром location. Метод Append є окремим випадком методу Insert;

public StringBuilder Remove (int start, int len). Метод видаляє підрядок довжини len, що починається з позиції start;

public StringBuilder Replace (string str1,string str2). Всі входження підрядка str1 заміняються на рядок str2;

public StringBuilder AppendFormat (<рядок форматів>, <об'єкти>). Метод є комбінацією методу Format класу String і методу Append. Рядок форматів, переданий методу, містить тільки специфікації форматів. Відповідно до цих специфікацій перебувають і форматуються об'єкти. Отримані в результаті форматування рядки приєднуються в кінець вихідного рядка.

Приклади використання основних властивостей і методів класу StringBuilder:

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

int k=s.Length;

Метод Append. Додає рядок до існуючій:

StringBuilder s1=new StringBuilder("Cogito ");

StringBuilder s2=new StringBuilder("ergo ");

s1.Append(s2);

s1.Append("sum");

System.Console.WriteLine(s1); //Надрукується "Cogito ergo sum"

//Я мислю, значить я існую

Метод Equals. Служить для порівняння двох рядків. Повертає true або false. Приклад використання:

if(s1.Equals(s2)) System.Console.WriteLine("Рядки рівні");

else

System.Console.WriteLine("Рядки не рівні");

Метод Insert. Вставляє символи в задану позицію (нумерація йде з нуля):

StringBuilder s1=new StringBuilder("abcde");

s1.Insert(2, "xyz");

System.Console.WriteLine(s1); //Надрукується "abxyzcde"

Метод Remove. Видаляє символи з рядка:

StringBuilder s1=new StringBuilder("abcde");

s1.Remove(1, 2);

System.Console.WriteLine(s1); //Надрукується "ade"

Певый параметр в Remove - це з якої позиції видаляємо (нумерація з нуля), другий - скільки символів видаляємо.

Метод Replace. Заміняє символи:

StringBuilder s=new StringBuilder("abcdeabcde");

s.Replace("abc", "ZZZ");

System.Console.WriteLine(s); //Надрукується "ZZZdeZZZde"

За винятком методу Remove, всі розглянуті методи є перевантаженими

Ємність буфера

Кожен екземпляр рядка класу StringBuilder має буфер, у якому зберігається рядок. Обсяг буфера - його ємність - може мінятися в процесі роботи з рядком. Об'єкти класу мають дві характеристики ємності - поточну й максимальну. У процесі роботи поточна ємність змінюється в межах максимальної ємності. Якщо розмір рядка збільшується, то відповідно автоматично росте й поточна ємність. Якщо ж розмір рядка зменшується, то ємність буфера залишається на тім же рівні. Із цієї причини іноді правильно зменшувати ємність. Варто пам'ятати, що спроба зменшити ємність до величини, меншої довжини рядка, приведе до помилки.

У класу StringBuilder є 2 властивості й один метод, що дозволяють аналізувати й управляти ємнісними властивостями буфера. Цими характеристиками можна управляти також ще на етапі створення об'єкта, - для цього є відповідний конструктор. Розглянемо властивості й метод класу, пов'язані з ємністю буфера:

  • властивість Capacity - повертає або встановлює поточну ємність буфера;

  • властивість MaxCapacity - повертає максимальну ємність буфера (максимальна кількість символів, які можна записати в об'єкт типу StringBuilder).

System.Console.WriteLine(s.MaxCapacity);

Метод int EnsureCapacity (int capacity) - дозволяє зменшити ємність буфера. Метод намагається спочатку встановити ємність, задану параметром capacity; якщо це значення менше розміру збереженого рядка, то ємність установлюється такий, щоб гарантувати розміщення рядка. Це число й повертається як результат роботи методу.

Варіанти індивідуальних завдань.

Завдання 17.1.

Ввести ваше прізвище, ім'я та по батькові як рядок символів. Визначити довжину рядка й кількість букв співпадаючих із другою буквою прізвища. Використовуючи методи класу StringBuilder вставити між кожною буквою прізвища й імені знак " - ". У по батькові замінити голосні малі літери на прописні. Вивести отриманий результат, додавши до нього коментарі - студент якої спеціальності й групи це виконав. Виконати завдання у відповідності зі своїм варіантом.

  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. Вивести третє слово й кількість букв у прізвищі.

Завдання 17.2.

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

Приклад програми: Дано рядок, роздільниками між словами є пробіли. Виділити слова і занести їх в одновимірний масив.

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

string[] h = new string[20];

String s, b;

String s1 = " ";

s = Console.ReadLine()+" ";

int r = s.Length;

Console.WriteLine(r);

int l = 0;

String d = "";

for (int i = 0; i <= r-1; i++)

{

if ((s[i] != s1[0])) d = d + s[i];

if ((s[i] == s1[0]) && (d != null)) {

l = l + 1; h[l] = d; d = null;

}

Console.WriteLine(" "+ s[i]);

}

Console.ReadLine();

}

}

}

Приклад 17.1: Дано рядок, роздільниками між словами є пробіли. Знайти мінімальне слово.

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

string[] h = new string[20];

String s, b;

String s1 = " ";

s = Console.ReadLine()+" ";

int r = s.Length;

Console.WriteLine(r);

int l = 0;

String d = "";

for (int i = 0; i <= r-1; i++)

{

if ((s[i] != s1[0])) d = d + s[i];

if ((s[i] == s1[0]) && (d != null))

{

l = l + 1; h[l] = d; d = null;

}

}

int min = h[1].Length;

int i1 = 1;

for (int i = 2; i <= l; i++)

{

if (min < h[i].Length)

{

min = h[i].Length; i1 = i;

}

}

Console.WriteLine(h[i1]);

Console.ReadLine();

}

}

}

Проаналізуйте наведені задачі, перевірте їх працездатність в середовищі програмування.

Бажаю успіху.



Загрузить файл

Похожие страницы:

  1. Операції над літерними величинами

    Реферат >> Астрономия
    ... людини, подається у вигляді текстів. Робота по коректовці, оформленню, аналізу ... ічній мові тексти подаються у вигляді літерних величин. Літерні величинивеличини, значеннями яких є слова або тексти ...
  2. Схеми на пасивних елементах та діодах

    Реферат >> Коммуникации и связь
    ... високим і приблизно рівним опору емітерного переходу б-е:Rвх=r е і має порядок одиниць ... визначається величинами резисторів Ro і Rе, і опором навантаження. Принцип роботи СТ даного ... типу аналогічний принципу роботи схеми емітерної стабілізації струму ...
  3. Основні визначення. Приклади алгоритмів

    Лекция >> Информатика, программирование
    ... ільш ефективного використання і полегшення роботи користувача з обчислювальною системою. Виконуючи ... однозадачною або одночасно підтримувати роботу декількох програм - бути ... і слід ввести проміжну літерну величину, наприклад, Z і використовувати отримане ...
  4. Принцип роботи 3УСКТ

    Реферат >> Астрономия
    ... дсилення звукової частоти в ПЧЗ. З емітерного повторювача підсилений по струму відеосигнал ... сигнали основних кольорів підсилюються до величин, необхідних для нормальної ... . Дана структурна схема призначена для роботи з кінескопами із самозведенням типу 51ЛК2Ц ...
  5. Розвиток творчих здібностей молодших школярів у роботі над текстом на уроках української мови в початкових

    Магистерская работа >> Педагогика
    ... - творчі здібності стають незалежною величиною, інакше кажучи, не існує творц ... виявляти увагу до аспектів навчальної роботи, практики роботи з текстом, від яких залежить ... пишалася; справа, кущ, туманом, немов, терну, їжачився, синюватим, повитий. Вправа 4. ...

Хочу больше похожих работ...

Generated in 0.0016779899597168