C#. Масиви рядків. Приклади розв’язку найбільш поширених задач




Масиви рядків. Приклади розв’язку найбільш поширених задач


Зміст


Пошук на інших ресурсах:

1. Масив рядків. Тип string[]. Створення масиву рядків

У мові C# можуть в масиви можуть бути об’єднані рядки. Кожен рядок представлений типом string.

Для створення масиву рядків потрібно виконати наступні кроки.

1. Оголосити посилання на тип string, наприклад

string[] arrString;

де arrString – назва посилання;

2. Виділити пам’ять для масиву

arrString = new string[size];

тут size – кількість рядків (екземплярів) типу string.

 

2. Приклад ініціалізації масиву рядків

Масив рядків може бути ініціалізований при його оголошенні. Нижче наводиться приклад ініціалізації та виведення на екран масиву daysOfWeek, який визначає дні тижня.

using System;

namespace ConsoleApp8
{
  class Program
  {
    static void Main(string[] args)
    {
      // Ініціалізація масиву рядків
     string[] daysOfWeek = { "Sunday", "Monday", "Tuersday",
      "Wednesday", "Thirsday", "Friday", "Saturday" };

      // Виведення масиву рядків AS в циклі
      for (int i = 0; i < daysOfWeek.Length; i++)
        Console.WriteLine("AS[{0}] = {1}", i, daysOfWeek[i]);
      Console.ReadKey();
    }          
  }
}

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

AS[0] = Sunday
AS[1] = Monday
AS[2] = Tuersday
AS[3] = Wednesday
AS[4] = Thirsday
AS[5] = Friday
AS[6] = Saturday

 

3. Приклад введення рядків з клавіатури та утворення масиву рядків

У прикладі вводяться рядки з клавіатури до тих пір, поки не буде введено пустий рядок “”. Одночасно формується масив рядків, який після завершення вводу виводиться на екран.

using System;

namespace ConsoleApp8
{
  class Program
  {
    static void Main(string[] args)
    {
      // Введення рядків з клавіатури
      // та утворення нового масиву

      // 1. Оголосити дані
      string[] AS; // посилання на масив рядків
      int count; // поточна кількість рядків у масиві
      string s;
      string[] AS2; // додаткова змінна-посилання - зберігає старий масив рядків

      // 2. Цикл вводу рядків
      Console.WriteLine("Enter strings:");

      count = 0; // обнулити кількість рядків
      AS = new string[count]; // виділити пам'ять для 0 рядків

      do
      {
        // Ввести рядок
        s = Console.ReadLine();

        // Перевірка, чи не пустий рядок
        if (s != "")
        {
          // якщо рядок не пустий, то додати його до масиву
          count++;

          // попередньо виділити пам'ять для нового масиву
          // в якому на 1 елемент більше
          AS2 = new string[count];

          // скопіювати старий масив в новий
          for (int i = 0; i < AS2.Length - 1; i++)
            AS2[i] = AS[i];

          // додати останній введений рядок в масив AS2
          AS2[count - 1] = s;

          // Звільняти пам'ять, попередньо виділену під AS не потрібно,
          // цим займається збирач сміття

          // перенаправити посилання AS на AS2
          AS = AS2;
        }
      } while (s != "");

      // Виведення масиву рядків AS в циклі
      for (int i = 0; i < AS.Length; i++)
        Console.WriteLine("AS[{0}] = {1}", i, AS[i]);

      Console.ReadKey();
    }
  }
}

Як видно з вищенаведеного коду, не потрібно робити звільнення попередньо виділеної пам’яті для масиву AS як у мовах C/C++. Цим займається збирач сміття.

Результат роботи програми

Enter strings:
abc
bcdef
ghi
jkl mno

AS[0] = abc
AS[1] = bcdef
AS[2] = ghi
AS[3] = jkl mno


 

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

У прикладі демонструється ввід масив з n рядків (n>0) та його сортування методом вставки. Рядки сортуються за зростанням.

using System;

namespace ConsoleApp8
{
  class Program
  {
    static void Main(string[] args)
    {
      // Сортування масиву рядків методом вставки.
      // 1. Оголошення змінних
      string[] AS; // масив рядків
      int count; // к-сть елементів у масиві
      string s; // додаткова змінна-рядок

      // 2. Ввести к-сть рядків
      Console.Write("count = ");
      count = Int32.Parse(Console.ReadLine());

      // 3. Виділити пам'ять для масиву з count рядків
      AS = new string[count];

      // 4. Ввести дані масиву з клавіатури
      Console.WriteLine("Enter array:");
      for (int i=0; i<AS.Length; i++)
      {
        Console.Write("AS[{0}] = ", i);
        AS[i] = Console.ReadLine();
      }

      // 5. Сортування методом вставки
      for (int i = 0; i < AS.Length - 1; i++)
        for (int j = i; j >= 0; j--)
          if (String.Compare(AS[j], AS[j + 1]) > 0) // функція Compare()
          {
            // поміняти значення місцями
            s = AS[j];
            AS[j] = AS[j + 1];
            AS[j + 1] = s;
          }

      // 6. Вивести масив AS
      Console.WriteLine("Sorted array:");
      for (int i = 0; i < AS.Length; i++)
        Console.WriteLine("AS[{0}] = {1}", i, AS[i]);

      Console.ReadKey();
    }
  }
}

Як видно з вищенаведеного прикладу, для порівняння двох масивів використовується функція Compare(). Ця функція повертає число більше 0, якщо перший рядок знаходиться в лексикографічному порядку після другого рядка. Якщо рядки рівні, функція повертає нульове значення.

Результат роботи програми

count = 5
Enter array:
AS[0] = lkd
AS[1] = kbd
AS[2] = abcd
AS[3] = jklm nop
AS[4] = ffed
Sorted array:
AS[0] = abcd
AS[1] = ffed
AS[2] = jklm nop
AS[3] = kbd
AS[4] = lkd

 

5. Приклад пошуку заданого рядка в масиві рядків

У прикладі вводиться масив рядків та вводиться деякий рядок. Якщо рядок наявний в масиві, то визначається його позиція. Результат пошуку виводиться на екран.

using System;

namespace ConsoleApp8
{
  class Program
  {
    static void Main(string[] args)
    {
      // Пошук заданого рядка в масиві рядків
      // 1. Оголошення змінних
      string[] AS; // масив рядків
      int count; // к-сть елементів у масиві
      string str; // рядок, який шукається

      // 2. Ввести к-сть рядків
      Console.Write("count = ");
      count = Int32.Parse(Console.ReadLine());

      // 3. Перевірка, чи значення count є коректне
      if (count<=0)
      {
        Console.WriteLine("Error. The value of count is incorrect.");
        Console.ReadKey();
        return;
      }

      // 4. Виділити пам'ять для масиву з count рядків
      AS = new string[count];

      // 5. Ввести дані масиву з клавіатури
      Console.WriteLine("Enter array:");
      for (int i=0; i<AS.Length; i++)
      {
        Console.Write("AS[{0}] = ", i);
        AS[i] = Console.ReadLine();
      }

      // 6. Ввести рядок символів
      Console.Write("Enter string: ");
      str = Console.ReadLine();

      // 7. Пошук рядка в масиві рядків
      bool f_is = false; // прапорець, що сигналізує наявність рядка в масиві
      int index = -1; // позиція рядка в масиві

      for (int i = 0; i < AS.Length - 1; i++)
      if (str == AS[i])
      {
        f_is = true;
        index = i;
      }

      // 8. Виведення результату
      if (f_is)
      {
        Console.WriteLine("String \"{0}\" is in the array.", str);
        Console.WriteLine("Position is {0}", index);
      }
      else
      {
        Console.WriteLine("String \"{0}\" is not in the array.", str);
      }

      Console.ReadKey();
    }
  }
}

Результат роботи програми

count = 7
Enter array:
AS[0] = sd
AS[1] = lkjl
AS[2] = wewe
AS[3] = ooii
AS[4] = slkdlk
AS[5] = cxx
AS[6] = lkl
Enter string: wewe
String "wewe" is in the array.
Position is 2

 

6. Приклад підрахунку кількості входжень заданого рядка в масиві рядків

У прикладі вводиться рядок та масив рядків. Потім здійснюється підрахунок кількості входжень заданого рядка в масиві рядків.

using System;

namespace ConsoleApp8
{
  class Program
  {
    static void Main(string[] args)
    {
      // Обчислення кількості входжень заданого рядка в масиві рядків
      // 1. Оголошення змінних
      string[] AS; // масив рядків
      int count; // к-сть елементів у масиві
      string str; // рядок, кількість входжень якого обчислюється
      int n_occurs; // кількість входжень - результат

      // 2. Ввід рядка str
      Console.WriteLine("Enter string:");
      str = Console.ReadLine();

      // 3. Ввід кількості елементів в масиві
      Console.Write("count = ");
      count = Convert.ToInt32(Console.ReadLine());

      // 4. Перевірка, чи коректне значення count
      if (count<=0)
      {
        Console.WriteLine("Error. The value of count is incorrect.");
        Console.ReadLine();
        return;
      }

      // 5. Виділення пам'яті для масиву рядків
      AS = new string[count];

      // 6. Ввід масиву з клавіатури
      Console.WriteLine("Enter the array AS:");
      for (int i=0; i<AS.Length; i++)
      {
        Console.Write("AS[{0}] = ", i);
        AS[i] = Console.ReadLine();
      }

      // 7. Підрахунок кількості входжень
      n_occurs = 0;
      for (int i = 0; i < AS.Length; i++)
        if (str == AS[i])
          n_occurs++;

      // 8. Виведення результату
      Console.WriteLine("n_occurs = {0}", n_occurs);

      Console.ReadKey();
    }
  }
}

Результат роботи програми

Enter string:
abc
count = 9
Enter the array AS:
AS[0] = dd
AS[1] = abc
AS[2] = ghi
AS[3] = jklm
AS[4] = abc
AS[5] = def
AS[6] = bca
AS[7] = abc
AS[8] = fklsdj
n_occurs = 3

 


Зв’язані теми