Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Работа со строками в .NET. Часть 1, основы. Логическая задача про взвешивание.


Информационный Канал Subscribe.Ru

Профессинальное программирование на .NET

Работа со строками в .NET

Часть 1

Хотя работа со строками довольно хорошо описана в упоминавшейся в предыдущем выпуске рассылке книге Дж. Рихтера, я решил затронуть эту тему, т.к. не у всех есть возможность прочитать эту книгу, а неправильное использование строк является частой ошибкой и ведет к снижению производительности приложения. К тому же, в книге имеется одна небольшая неточность по работе класса StringBuilder.

В .NET все строки являются экземплярами класса System.String (алиас string в C#). Он неявно наследуется от System.Object и реализует интерфейсы IComparable, ICloneable, IConvertible, IEnumerable:

[Serializable]
public sealed class String : IComparable, ICloneable, IConvertible, IEnumerable

C# рассматривает String как примитивный тип, поэтому для инициализации строковой переменной литералом следует использовать такой синтаксис:

String s = "This is a string.";

Компилятор размещает строковые литералы в метаданных модуля, а доступ к ним в run-time происходит с использованием так называемого механизма интернирования строк (string interning). Об интернировании я расскажу в следующей части.

Так работать не будет:

String s = new String("This is a string.");

Т.к. String не имеет конструктора, принимающего String. Конструкторы String позволяют создать экземпляр из символа (char) или массива символов (char[]). При вызове из C++ with Managed Extensions или небезопасного кода C# (использующего указатели) применяются конструкторы, принимающие char* или sbyte*.

C# использует синтаксис С++ для задания специальных символов типа перевода строки или табуляции:

String s = "Line\r\nNew Line";

При выводе, например, с помощью Console.Write(s), "New Line" будет выведено на новой строке.
"\r\n" соответствует константе vbCrLf в Visual Basic 6.0. Но существует более правильный способ перевода строки. Класс System.Environment содержит read-only свойство NewLine, возвращающее соответствующую строку, в зависимости от платформы.
String s = "Line" + Environment.NewLine + "New Line";

Например, на платформе UNIX Environment.NewLine вернет \n.

String s = "Column1\tColumn2";

Column1 и Column2 будут разделены табуляцией.

Символ обратной косой черты ("\") является служебным и при использовании внутри строки его необходимо удваивать:
String path = "c:\\Program Files\\Microsoft Visual Studio 2003\\";

Однако, при помощи символа @ (коммерческое эт) можно определить так называемые "дословные строки" (verbatim strings). В этом случае компилятор воспринимает обратную косую черту как обычный символ. Этот код эквивалентен предыдущему:
String path = @"c:\Program Files\Microsoft Visual Studio 2003\";

Продолжение про работу со строками в .NET читайте в следующем выпуске.

Логическая задача

Сначала ответ на задачу из предыдущего выпуска про бильярдные шары.

Имеется 9 совершенно одинаковых с виду бильярдных шаров. Один из шаров тяжелее других. Необходимо при помощи рычажных весов (т.е. имеющих 2 чаши и показывающих, какая чаша тяжелее или легче) найти тяжелый шар, используя не более, чем 2 взвешивания.

Ответ. Разделим шары на 3 группы по 3 шара в каждой. На одну чашу положим первую группу, а на другую - вторую. Если весы находятся в равновесии, то тяжелый шар находится в третьей группе. Иначе - на перевесившей чаше. Далее, положим на каждую чашу весов по одному шару из "тяжелой группы" (два шара на весах и один остался). Если весы в равновесии, то тяжелый шар - оставшийся. Иначе - на перевесившей чаше.

Надеюсь, эта задача не вызвала затруднений. Однако, если заранее неизвестно, тяжелее или легче искомый шар, задача существенно усложняется. Вот новые условия:
Имеется 13 овершенно одинаковых с виду бильярдных шаров, из них ровно один бракованный, причем неизвестно, легче он остальных или тяжелее. Требуется найти этот шар за три взвешивания. Весы - стандартные для задач этого типа: две чашечки без гирь.

На сегодня все. Приятного программирования. Да пребудет с вами Великая Сила!
Вопросы? Пожелания? Пишите: olen33@gmail.com

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.gurudotnet
Отписаться
Вспомнить пароль

В избранное