Массивы строк в C
В языке C# строки можно объединять в массив. Каждая строка представляется типом string.
Создание массива строк. Тип string[].
Для создания массива строк необходимо выполнить следующие:
- Объявить ссылку на тип string, к примеру:
string[] arrString; где arrString – название ссылки; - Выделить память для массива
arrString = newstring[size];
здесь size – количество строк (экземпляров) типа string.
Пример инициализации массива строк
Массив строк можно инициализировать при его объявлении. Дальше приводится пример инициализации и вывод массива daysOfWeek на экран, определяющего дни недели.
using System;
namespace ConsoleApp8
{
classProgram
{
static void Main(string[] args)
{
// Инициализация массива строк
string[] daysOfWeek = { «Sunday», «Monday», «Tuersday»,
«Wednesday», «Thirsday», «Friday», «Saturday» };// Вывод массива строк AS в цикле
for (inti = 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
Пример ввода строк с клавиатуры и создания массива строк
В приведенном ниже примере вводятся строки с клавиатуры до тех пор, пока не будет введена пустая строка «». Вместе с тем формируется массив строк, выводящийся на экран после окончания ввода.
using System;
namespace ConsoleApp8
{
classProgram
{
static void Main(string[] args)
{
// Ввод строк с клавиатуры
// и образование нового массива// 1. Объявление переменных
string[] AS; // ссылка на массив строк
intcount; // текущее количество строк в массиве
string s;
string[] AS2; // дополнительная переменная-ссылка — сохраняет старый массив строк// 2. Цикл ввода строк
Console.WriteLine(«Enter strings:»);count = 0; // обнулить количество строк
AS = newstring[count]; // выделить память для 0 строкdo
{
// Ввести строку
s = Console.ReadLine();// Проверка, пустая ли строка
if (s!=»»)
{
// если строка не пустая, то добавить строку в массив
count++;// предварительно выделить память для нового массива
// в котором на 1 элемент больше
AS2 = newstring[count];// скопировать старый массив в новый
for (inti = 0; i< AS2.Length — 1; i++)
AS2[i] = AS[i];// добавить последнюю введенную строку в массив AS2
AS2[count — 1] = s;// Освобождать память, предварительно выделенную под AS не нужно,
// этим занимается сборщик мусора// перенаправить ссылку AS на AS2
AS = AS2;
}
} while (s != «»);// 3. Вывод массива строк AS в цикле
for (inti = 0; i<AS.Length; i++)
Console.WriteLine(«AS[{0}] = {1}», i, AS[i]);
Console.ReadKey();
}
}
}
Из вышеприведенного кода видно, что не нужно делать освобождение предварительно выделенной памяти для массива AS как в языках C/C++. За это отвечает сборщик мусора.
Результат работы программы
Enterstrings:
abc
bcdef
ghi
jklmnoAS[0] = abc
AS[1] = bcdef
AS[2] = ghi
AS[3] = jklmno
Пример сортировки массива строк методом вставки
В примере показан ввод массива из n строк (n>0) и его сортировка методом вставки (сортировка по возрастанию).
using System;
namespace ConsoleApp8
{
classProgram
{
static void Main(string[] args)
{
// Сортировка массива строк методом вставки
// 1. Объявление переменных
string[] AS; // массив строк
intcount; // количество элементов в массиве
string s; // дополнительная переменная-строка// 2. Ввести количество строк
Console.Write(«count = «);
count = Int32.Parse(Console.ReadLine());// 3. Выделить память для массива из count строк
AS = newstring[count];// 4. Ввести данные массива с клавиатуры
Console.WriteLine(«Enterarray:»);for (inti=0; i<AS.Length; i++)
{
Console.Write(«AS[{0}] = «, i);
AS[i] = Console.ReadLine();
}// 5. Сортировка методом вставки
for (inti = 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 (inti = 0; i<AS.Length; i++)
Console.WriteLine(«AS[{0}] = {1}», i, AS[i]);Console.ReadKey();
}
}
}
Из примера видно, что для сравнения двух массивов применяется функция Compare(). Если первая строка находится в лексикографическом порядке после второй строки, функция возвращает число больше 0. Если строки равны, функция Compare()возвращает нулевое значение.
Результат работы программы
count = 5
Enter array:
AS[0] = lkd
AS[1] = kbd
AS[2] = abcd
AS[3] = jklmnop
AS[4] = ffedSorted array:
AS[0] = abcd
AS[1] = ffed
AS[2] = jklmnop
AS[3] = kbd
AS[4] = lkd
Пример поиска заданной строки в массиве строк
В примере ниже вводится массив строк и вводится некоторая строка. Если она есть в массиве, то определяется ее позиция. На экран выводится результат поиска.
usingSystem;
namespaceConsoleApp8
{
classProgram
{
static void Main(string[] args)
{
// Поиск заданной строки в массиве строк
// 1. Объявление переменных
string[] AS; // массив строк
intcount; // количество элементов в массиве
stringstr; // искомая строка// 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 = newstring[count];// 5. Ввести данные массива с клавиатуры
Console.WriteLine(«Enter array:»);for (inti=0; i<AS.Length; i++)
{
Console.Write(«AS[{0}] = «, i);
AS[i] = Console.ReadLine();
}// 6. Ввести строку символов
Console.Write(«Enter string: «);
str = Console.ReadLine();// 7. Поиск строки в массиве строк
boolf_is = false; // флаг, сигнализирующий о наличии строки в массиве
intindex = -1; // позиция строки в массивеfor (inti = 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] = lklEnter string: wewe
String «wewe» is in the array.
Positionis 2
Пример подсчета количества вхождений заданной строки в массиве строк
В примере ниже вводится строка и массив строк. Дальше осуществляется подсчет количества вхождений заданной строки в массиве строк.
using System;
namespace ConsoleApp8
{
classProgram
{
static void Main(string[] args)
{
// Вычисление количества вхождений заданной строки в массиве строк
// 1. Объявление переменных
string[] AS; // массив строк
intcount; // количество элементов в массиве
stringstr; // строка, количество вхождений которой вычисляется
intn_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 (inti=0;i<AS.Length;i++)
{
Console.Write(«AS[{0}] = «, i);
AS[i] = Console.ReadLine();
}// 7. Подсчет количества вхождений
n_occurs = 0;
for (inti = 0; i<AS.Length; i++)
if (str == AS[i])
n_occurs++;// 8. Вывод результата
Console.WriteLine(«n_occurs = {0}», n_occurs);Console.ReadKey();
}
}
}
Результат выполнения программы
Enterstring:
abc
count = 9Enter 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