
- •Глава 8. Строки - объекты класса string
- •8.1. Строковые литералы
- •8.2. Строковые объекты и ссылки типа string
- •8.3. Операции над строками
- •8.4. Некоторые методы и свойства класса String
- •8.5. Форматирование строк
- •8.7. Применение строк в переключателях
- •8.8. Массивы строк
- •8.8. Сравнение строк
- •8.9. Преобразования с участием строкового типа
- •8.10. Аргументы функции Main()
8.10. Аргументы функции Main()
До сего времени мы использовали вариант метода Main() без параметров. Имеется возможность определять метод Main() с таким заголовком:
public static void Main (string [ ] arguments)
где arguments - произвольно выбираемое программистом имя ссылки на массив с элементами типа string.
Эти элементы массива представляют в теле функции Main() аргументы командной строки. Конкретные аргументы командной строки это разделённые пробелами последовательности символов, размещённые после имени программы при её запуске из командной строки.
Если программа запускается не из командной строки, а из среды Visual Studio, то для задания аргументов командной строки нужно использовать следующую схему. В основном меню выбираете пункт Project, затем в выпадающем меню выбираете команду имя_проекта Properties. В открывшемся окне на панели слева (Application) выбираете закладку Debug. Справа открывается панель, одно из текстовых полей которой названо Command line arguments. Текст, который вводится в это поле, воспринимается как последовательность (разделённых пробелами) значений аргументов функции Main(). Как воспользоваться этими значениями (этим массивом строк) - дело автора программы. Продемонстрируем на следующем примере основные особенности обработки аргументов командной строки. Пусть требуется подсчитать сумму целых чисел, записанных через пробелы при запуске программы в командной строке.
Числа вводятся в виде наборов символов, которые отделены друг от друга (и от имени запускаемой программы) пробелами. В программе предусмотрим печать сообщения об отсутствии аргументов в командной строке.
Текст программы:
// 08_04.cs - Аргументы функции Main()
int sum = 0;
if (numbs.Length == 0)
{
Console.WriteLine("Heт аргументов в командной строке!");
}
else
{
for (int i = 0; i < numbs.Length; i++)
sum += Convert.ToInt32(numbs[i]);
Console.WriteLine("Cyммa чисел = " + sum);
}
Результаты первого выполнений программы:
Командная строка: Program_1.exe<ENTER>
Результат:
Нет аргументов в командной строке!
Результаты второго выполнений программы:
Командная строка: Program_1.exe 24 16 -15<ENTER>
Результат:
Сумма чисел = 25
В теле функции Main() определена целочисленная переменная sum для подсчёта суммы. Параметр numbs - ссылка на массив ссылок на объекты типа string. Если при запуске программы в командной строке нет аргументов -массив пуст, значение свойства numbs.Length равно нулю. Выводится сообщение "Нет аргументов в командной строке" и оператор return; завершает выполнение программы. При наличии аргументов, выполняется цикл for с параметром int i. (Можно применить и цикл foreach.) Строка -очередной элемент массива numbs[i] - служит аргументом метода Convert. Tolnt32(). Возвращаемое целочисленное значение увеличивает текущее значение переменной sum.
8.11. Неизменяемость объектов класса String
К символам объекта класса string, будь то объект, созданный компилятором для представления строки-литерала, или объект, созданный с помощью обращения к конструктору класса string, можно обращаться только для получения их значений. Для этих целей используется выражение с операцией индексирования [ ].
Чтобы изменить строку, приходится прибегать к обходным маневрам. Например, можно переписать символы строки во вспомогательный массив с элементами типа char. Элементы такого массива доступны изменениям. Выполнив нужные преобразования, создадим на основе изменённого массива новую строку, используя конструктор string (char[ ]). Если исходная строка не нужна - можем присвоить её ссылке значение ссылки на полученный объект
Последовательность операторов, соответствующая описанной схеме:
string row = "0123456789";
char[] rev = row.ToCharArray();
Array.Reverse(rev);
row = new string(rev);
Console.WriteLine(row);
Результат выполнения этого фрагмента программы: 9876543210
В примере определена ссылка row на объект класса string, инициализированный строковым литералом "0123456789". Определена без инициализации ссылка rev на символьный массив. Затем к объекту, связанному ссылкой row, применён метод ToCharArray() и результат присвоен ссылке rev. Метод Reverse() класса Array меняет на обратный порядок размещения значений элементов массива, связанного со ссылкой rev, использованной в качестве аргумента. Из изменённого массива, адресованного ссылкой rev, конструктор string() создаёт новую строку, ссылка на которую присваивается переменной row. Тем самым разрывается связь ссылки row со строкой "0123456789" и row связывается с объектом, содержащим последовательность "9876543210".