ТЕМА 20: Низове

Низове

 

В C# низовете са обекти, т.е. типът от данни string в C# е указателен тип. В много други езици за програмиране, например C и C++, низът е символен масив. При създаване на константа от тип низ от символи, фактически се създава обект от тип string. Тъй като класът string е достатъчно голям, ние ще разгледаме само основните му характеристики. Най-простия начин за създаване на обект от тип string е използване на константа от тип низ от символи. Например:

string str = "tova e konstanta ot tip niz ot simvoli";

Тук променливата str е от указателен тип string, на който се присвоява адреса на константата от тип низ от символи. Може също да се зададе обект от тип string, като се използва масив от тип char. Например:

char[] str1={'t', 'e', 's', 't'};

string str2 = new string(str1);

След създаване на обект от тип string той може да се използва в програмата навсякъде, където може да се използва константа от тип низ от символи. Например, като аргумент в метода WriteLine:

Console.WriteLine(str2);

Сега ще разгледаме някои от методите на класа string:

- static string Copy (strig str)  – Връща копие на променливата str.

- int CompateTo(string str) – Връща число < 0 , ако стойността на извикания низ е по-малка от стойността на променливата str. Връща число  > 0, ако стойността на извикания низ е по-голяма от стойността на променливата str и връща 0, ако низовете са равни.

- int IndexOf(string str) – Този метод извършва търсене в извикващия низ на подниза, зададен като параметър str. Връща индекса на позицията в извиквания низ, където за първи път е открит подниза или стойност – 1, ако поднизът не е открит.

- int LastIndexOf(string str) – Този метод извършва търсене в извикващия низ на подниза, зададен като параметър str. Връща индекса на позицията в извиквания низ, където за последен  път е открит подниза или стойност – 1, ако поднизът не е открит.

Обектите от тип string също имат свойството Length, съдържащо информацията за дължината на низа. За получаване на стойностa на отделен символ на низа е необходимо да се използва неговия индекс. Например:

      string str = "test";

      Console.WriteLine(str[0]); // - 6te se izvede patviq simvol 't';

Както и масивите, първия елемент на низа има индекс 0, но използването на индекс за присвояване на нова стойност на символ от низа е забранено. Индекса може да се използва само за получаване на символа. За сравняване на два низа може да се използва операцията ==. Обикновено, когато тази операция се използва за променлива от указателен тип, тя определя дали те соча към един и същи обект. Когато операцията == се прилага към две променливи от указателен тип string, то се проверява съдържанието на самите низове. Същото е вярно и за оператора !=, когато той се използва са сравняване на обекти от тип string, обаче другите операции за сравнение, сравняват стойностите на променливите от указателен тип string, както работят с обекти от други типове. Ще разгледаме програма , която демонстрира използването на някои от операциите с низове:

using System;

class StringOperations

      {

          static void Main()

          {

              string str1 = "използване на операции с низове ";

              string str2 = string.Copy(str1); // pravi se kopie

              string str3 = " това е константа от тип низ от символи ";

              int result, idx;

              Console.WriteLine("Дължината на низа str1 = " + str1.Length + " символ ");

              for (int i = 0; i < str1.Length; i++)

                  Console.WriteLine(str1[i]);

              Console.WriteLine();

              if (str1 == str2)

                  Console.WriteLine("str1 == str2");

              else

                  Console.WriteLine("str1 != str2");

              result = str1.CompareTo(str3);

              str2 = "ЕдноДвеТриЕдно";

              idx = str2.IndexOf("Едно");

              Console.WriteLine("idx = " + idx);

              idx = str2.LastIndexOf("Едно");

              Console.WriteLine("idx = " + idx);

          }

    }

С помощта на оператора + може да се конкатенират низове. Например:

string str1 = "Конка";

      string str2 = "тен";

      string str3 = "ация";

      string str4 = str1 + str2 + str3;

Елементите на масив могат да бъдат низове. Да разгледаме пример на масив с елементи низове:

using System;

class StringArrays

        {

            public static void Main()

            {

                string[] str = {"това е ", " пример", "за", "низов",     "масив." };

                Console.WriteLine("Първоначален масив: ");

                for (int i = 0; i < str.Length; i++)

                    Console.WriteLine(str[i]);

                Console.WriteLine();

                str[1] = "също";

                str[2] = "масив от";

                str[3] = "низове";

                Console.WriteLine("Променен масив: ");

                for (int i = 0; i < str.Length; i++)

                    Console.WriteLine(str[i]);

                Console.WriteLine();               

            }

        }

При работа с низове трябва да се обърне внимание на една много важна характеристика на обектите от тип string. Веднъж създадена последователността от символи в низа, тя не може да бъде променяна. Въпреки, че такова ограничение на пръв поглед изглежда като сериозен недостатък, но в действителност не е така. Когато ни потрябва низ, различен от съществуващия, то просто се създава нов низ, съдържащ необходимите изменения. Тъй като неизползваните низови обекти автоматично се отстраняват от паметта по време на „събиране на боклука”, то старите низове ще бъдат, незабелязано за потребителя отстранени. Стойността на променливата от указателен тип, която сочи към обект от тип string, безусловно може да бъде променена, но след създаване на нов обект от тип string неговото съдържание не може да се променя.

За изменение на низ се използва метода Substring(), връщащ нов низ, който съдържа копие на указана част от извикващия низ. Тъй като се създава нов обект от тип string, съдържащ подниз, то първоначалният низ остава непроменен. Методът Substring() има следния общ вид:

string Substring(int начален_индекс, int дължина)

Пример:

using System;

 

class Substring

{

    public static void Main()

    {

        string orgstr = "registraciq";

        string substr1 = orgstr.Substring(0, 7);

        Console.WriteLine(substr1);

        string substr2 = orgstr.Substring(6, 5);

        Console.WriteLine(substr2);

    }

}

В С# е включен клас StringBuilder, който се намира в пространството от имена System.Text, освен този клас се създават низови обекти, които могат да бъдат изменяни.

 

 

Търсене