Купить
 
 
Жанр: Учеба

Си шарп: создание приложений для windows

страница №13

го
С# файла XML файл, описывающий его. Полученный файл вы можете
обрабатывать как хотите, например, преобразовав в HTML-документацию.
Конечно же, существуют правила документирования кода. Основные
правила документирования будут рассмотрены в этой главе.
Тэги документирования представлены в следующей таблице:
"с"
"рага"
"returns"
"code"
"param"
"see"
"example"
"paramref"
"seealso"
"exception"
"permission"
"summary"
"list"
"remarks"
" value "
Тэг "с" указывает на то, что текст, заключенный в него, является
кодом.
"code"
Тэг "code" имеет то же самое значение, что и тэг "с", но используется
для маркировки нескольких строк.
"example"
Тэг "example" применяется для указания примера использования какого-либо
метода или иного элемента вашего модуля.
"exception"
Тэг "exception" используется для комментирования исключений в вашем
коде. Для этого параметр тэга cref="..." должен содержать System.Exception.
Компилятор проверит, существует ли исключение, и в случае
отсутствия выдаст сообщение об ошибке. В следующем примере демонстрируется
использование этого тэга:
/// "exception cref-"System.Exception"" Это исключение "/exception"
class SampleClass: Exception { }
Результат обработки тэга "exception" таков: в XML файле, в тэге
"member name="T:SampleClass"", соответствующем элементу вашего
кода, будет находиться тэг "exception" с параметром cref, указываюДелегаты
и обработчики событий 213
щим имя элемента. Внутри этого тэга будет помещаться ваш комментарий.
Например, таким будет результат компилирования последнего
примера:
"?xml version-"1.0"?"
"doc"
"members"
"member name="T:SampleClass""
"exception cref="T:System.Exception"" Это исключение "/exception"
"/member"
"/members"
"/doc"
Тэг "list" используется для создания таблицы, ненумерованного, нумерованного
списка или списка определений. У него есть параметр type,
который может принимать три значения: "bullet"--для ненумерованного
списка, "number" - для нумерованного списка и "table" - для таблицы.
Внутри "list" могут находиться два вида тэгов: "listheader" и "item".
Каждый из них может содержать внутри себя два тэга -"term" и
"description".
"listheader" используется для описания заголовка таблицы или списка,
тэг "item" для указания элемента. В случае таблицы нумерованных
или ненумерованных списков внутри тэгов "listheader" и "itera" используется
только тэг "term", в случае списка определений "term" и
"description".
Следующий пример демонстрирует использование "term" для создания
списка определений:
public class SampleClass {
/// "list type="bullet""
/// "listheader"
/// "term" Фрукты "/term"
/// "/listheader"
/// "item"
/// "term" Яблоко "/term"
/// "description" растет на яблоне "/description"
/// "/item"
/// "item"
/// "term" Банан "/term"
/// "description" растет на пальме "/descripcion"
/// "/item"
/// "item"
/// "term" Груша "/term"
/// "description" растет на груше "/description"
/// "/item"
/// "/l-st"
public static void Main () { }
214 Раздел I I . Фундаментальные понятия
"рага"
Тэг "рага" используется для обозначения параграфа. Его следует применять
внутри таких тэгов, как "return" и "remark".

"param"
Тэг "param" используется для описания аргументов методов. Его параметр
name содержит имя аргуметна метода, в сам же тэг заключено
описание аргумента.
public class SampleClass {
/// "param name="input"" Содержит строку ввода "/param"
public static void SampleMethod (String input) { }
"paramref"
Тэг "paramref" показывает, что слово является аргументом метода.
Его параметр name содержит имя аргумента метода, использование которого
показано в следующем примере:
public class SampleClass {
/// "paramref name="input"/" - это строка ввода.
public static void SampleMethod (String input) { }
"permission"
Тэг "permission" применяется для комментирования прав доступа к
элементам вашего кода. Для этого параметр тэга cref="..." должен содержать
System.Security.PermissionSet. В следующем примере демонстрируется
использование этого тэга:
using System;
class SampleClass{
/// "exception cref="System.Security.PermissionSet"" Свободный доступ к этому
методу "/exception"
public static void SampleMethod() { }
public static void Main() { }
Результат обработки этого примера показан ниже:
"?xml version="I.О"?"
"doc"
"members"
"member name="M:SampleClass.SampleMethod""
"permission cref="T:System.Security.PerraissionSet"" Свободный доступ к этому
методу "/permission"
"/member"
"/members"
"/doc"
"remarks"
Тэг "remarks" служит для вставки комментариев для вашего класса
или другого типа.
"returns"
Тэг "returns" используется для описания возвращаемого значения
метода. Следующий пример демонстрирует его применение:
using System;
class SampleClass{
Делегаты и обработчики событий 215
/// "returns" Возвращает число Пи "/returns"
public static double PiSamplef) { return 3.1415926; }
public static void Main() { }
"see"
Тэг "see" позволяет вам ссылаться на любой элемент, доступный в
процессе компиляции, например элемент вашего кода. Его параметр
cref ="..." - ссылка на этот элемент. Пример:
using System;
class SanpleClass(
/// "para" Метод Main использует System.Console. "see cref="System.Console"/"
for console operations. "/para"
public static void Main() {
System.Console.WriteLine("SampleClass Console Output");
I

"seealso"
Тэг "seealso" ссылается на элементы, которые следует поместить в
раздел "Смотри также". Параметр этого тэга cref="..." - ссылка на любой
элемент, доступный в процессе компиляции.
"summary"
Тэг "summary" следует использовать для описания элемента вашего
класса. Для описания самого класса необходимо выбрать "remarks".
Пример:
using System;
/// "remarks" Это мой класс "/remarks"
class SampleClassf
/// "summary" Main это метод класса SampleCIass "/summary"
public static void Main() { )
"value"
Тэг "value" используется для описания свойств.
ПРАВИЛА ДОКУМЕНТИРОВАНИЯ
Как вы уже могли заметить, XML комментарий кода начинается с ///.

Помимо того, компилятор проверяет синтаксис всех тэгов и допустимость
употребления большинства тэгов. Например, если вы захотите описать несуществующий
аргумент метода, компилятор выдаст ошибку.
Вам могло показаться, что некоторые тэги являются бесполезными,
без них можно обойтись. Необходимо отметить, что XML не несет в себе
представления, а правильная структура ваших XML комментариев гарантирует
правильное их представление. Именно поэтому я советую вам
воспользоваться приведенными выше рекомендациями.
18. РАБОТА СО СТРОКАМИ
Было время, когда люди использовали компьютеры исключительно
для управления числовыми значениями. Первые компьютеры нужны были
лишь для вычисления траекторий полета ракет, и программирование
преподавалось только на математических факультетах ведущих университетов.

Сегодня большинство программ оперирует со строками намного больше,
чем с числами. Обычно строки используются для обработки текстов,
манипуляций с документами и создания Web-страниц.
С# обеспечивает встроенную поддержку работы со строками. Более
того, С# обрабатывает строки как объекты, что инкапсулирует все методы
манипуляции, сортировки и поиска, обычно применяемые к строкам
символов.
ОСОБЕННОСТИ ТИПА Sytem.String
С# обрабатывает строки как встроенные типы, которые являются гибкими,
мощными и удобными. Каждый объект строки - это неизменная
последовательность символов Unicode. Другими словами, те методы, которые
изменяют строки, на самом деле возвращают измененную копию,
а первоначальная строк остается неповрежденной.
Объявляя строку на С# с помощью ключевого слова string, вы фактически
объявляете объект типа System.String, являющийся одним из встроенных
типов, обеспечиваемых .NET Framework библиотекой классов. С#
строка - это объект типа System.String, и я буду употреблять эти имена
попеременно на протяжении всей главы.
Объявление класса System.String следующее:
public sealed class String: IComparable, ICloneable, IConvertible, lEnumerable
Такое объявление говорит о том, что класс запечатан, что невозможно
унаследовать свой класс от класса String. Класс также реализует
четыре системных интерфейса - IComparable, ICloneable, IConvertible и
lEnumerable - которые определяют функциональные возможности System.
String за счет его дополнительного использовния с другими классами
в .NET Framework.
Интерфейс IComparable определяет тип, реализующий его как тип, значения
которого могут упорядочиваться. Строки, например, могут быть
расположены в алфавитном порядке; любую строку можно сравнить с
другими строками, чтобы определить, какая из них должна стоять перРабота
со строками 217
вой в упорядоченном списке. IComparable классы реализуют метод СотрагеТо.

IEnumerable интерфейс позволяет вам использовать инструкцию foreach,
чтобы перебирать элементы строки как набор символов.
IQoneable объекты могут создавать новые экземпляры объектов с теми
же самыми значениями, как и первоначальный вариант. В данном случае
возможно клонировать строку таким образом, чтобы создать новую с
тем же самым набором символов, как и в оригинале. ICIoneable классы
реализуют метод С1опе().
IConvertible классы реализуют методы для облегчения преобразования
объектов класса к другим встроенным типам, например Tolnt32 (), ToDouble (),
ToDecimal Q и т. д.
СОЗДАНИЕ СТРОК
Наиболее общий способ создания строк состоит в том, чтобы установить
строку символов, известную как строковый литерал, определяемый
пользователем, в переменную типа string:
string newString = " Новая строка";
Указанная строка может содержать служебные символы типа "\п" или
"\t", которые начинаются с наклонной черты (\) и используются для указания
перевода строки или вставки символа табуляции. Поскольку наклонная
черта влево самостоятельно используется в некоторых синтаксисах
строк, типа URL или путей каталога, то в такой строке наклонной черте
влево должен предшествовать другой символ наклонной черты влево.
Строки могут также быть созданы с помощью дословной записи строки.
Такие строки должны начинаться с символа (@), который сообщает
конструктору String, что строка должна использоваться дословно, даже
если она включает служебные символы. В дословном определении строки
наклонные черты влево и символы, которые следуют за ними, просто
рассматриваются как дополнительные символы строки. Таким образом,
следующие два определения эквивалентны:
string stringOne =- "\\\\MySystem\\MyDirectory\\MyFile.txt";
string stringTwo = @"\\MySystem\MyDirectorу \MyFile.txt";
В первой строке используется обычный литерал строки, так что символы
наклонной черты влево (\) должны дублироваться. Это означает,
что для отображения (\) нужно записать (\\). Во второй строке используется
дословная литеральная строка, так что дополнительная наклонная
черта влево не нужна.

Следующий пример иллюстрирует многострочные строки:
string stringOne - "Line One\nLine Two";
string stringTwo - @"Line One
Line Two";
И снова эти объявления строк взаимозаменяемы. Какой вариант вы
будете использовать - вопрос удобства и личного стиля.
213 Раздел I I . Фундаментальные понятия
System. Object.ToString()
Другой способ создать строку состоит в том, чтобы вызвать у объекта
метод ToString() и установить результат переменной типа string. Все встроенные
типы имеют этот метод, что позволяет упростить задачу преобразования
значения (часто числового значения) к строковому виду. В следующем
примере вызывается метод ToString() для типа int, чтобы сохранить
его значение в строку.
int mylnt = 10;
string intString = mylnt.ToString{ ] ;
Вызов метода ToString() у объекта mylnt вернет строковое представление
числа 10.
Класс System.String в .NET поддерживает множество перегруженных конструкторов,
которые обеспечивают разнообразные методы для инициализации
строковых значений различными типами. Некоторые из этих конструкторов
дают возможность создавать строку в виде массива символов или в
виде указателя на символы. При создании строки в виде массива символов
CLR создает экземпляр новой строки с использованием безопасного кода.
При создании строки на основе указателя применяется "небезопасный" код,
что крайне нежелательно при разработке приложений .NET.
МАНИПУЛИРОВАНИЕ СТРОКАМИ
Класс string обеспечивает множество встроенных методов для сравнения,
поиска и управления строковыми значениями. Вот неполный список
всех возможностей этого класса:
Empty - свойство, определяющее, пустая ли строка;
Compare() - функция сравнения двух строк;
CompareOrdinal() - сравнивает строки в независимости от региональных
настроек;
Concat() - создает новую строку из двух и более исходных строк;
СоруО - создает дубликат исходной строки;
Equals() - определяет, содержат ли две строки одинаковые значения;
Format( ) - форматирует строку, используя строго заданный формат;
InternO - возвращает ссылку на существующий экземпляр строки;
Join() - добавляет новую строку в любое место уже существующей строки;
Chars - индексатор символов строки;
Length - количество символов в строке;
CloneO - возвращает ссылку на существующую строку;
CompareToO - сравнивает одну строку с другой;
CopyToQ - копирует определенное число символов строки в массив Unicode
символов;
EndsWithQ - определяет, заканчивается ли строка определенной последовательностью
символов;
Работа со строками 219
EqualsQ - определяет, имеют ли две строки одинаковые значения;
InsertO - вставляет новую строку в уже существующую;
LastlndexOfQ- возвращает индекс последнего вхождения элемента в
строку;
PadLeft() - выравнивает строку по правому краю, пропуская все пробельные
символы или другие (специально заданные);
PadRight() - выравнивает строку по левому краю, пропуская все пробельные
символы или другие (специально заданные);
Remove() - удаляет необходимое число символов из строки;
Split() - возвращает подстроку, отделенную от основного массива определенным
символом;
StartsWith() - определяет, начинается ли строка с определенной последовательности
символов;
Substring() - возвращает подстроку из общего массива символов;
ToCharArray() - копирует символы из строки в массив символов;
ToLower() - преобразует строку к нижнему регистру;
ToUpper() -преобразует строку к верхнему регистру;
TrimQ - удаляет все вхождения определенных символов в начале и в конце
строки;
TrimEndO - удаляет все вхождения определенных символов в конце строки;
TrimStartf) - удаляет все вхождения определенных символов в начале
строки.
Теперь давайте рассмотрим пример использования строк. Для этого
напишем приложение, использующее методы Compare( ), Concat( ), Copy(),
Insertf ) и многие другие.
using System;
using System;
namespace stringManipulating
{
using System;
public class StringTester
{
static void Main( )
{
// создаем несколько строк
string strl = "абвг";
string str2 = "АБВГ";
string str3 = @"C# представляет собой инструмент " +
"быстрого создания приложений для .NET платформы";
int result;
//методы сравнения строк
220 Раздел II. Фундаментальные понятия
//используем статическую функцию Compare для сравнения
result = string.Compare(strl, str2);
Console.WriteLine( @"сравниваем strl; {0} и str2: {1}, "+
"результат; (2)\n", strl, str2, result);
//используем функцию Compare с дополнительным параметром
//для игнорирования регистра строки
result •= string. Compare (strl, str2, true) ;
Console.WriteLine("Сравниваем без учета регистрэ");
Console.WriteLine (@"strl: {0), str2: {1}, " h
"результат: {2}\n", strl, str2, result);
// методы объединения строк
//используем функцию Concat для объединения строк
string str4 = string.Concat(strl, str2);
Console.WriteLine( @"Создаем str4 путем "+
"объединения strl и str2: \n{0)", str4);
// используем перегруженный оператор
// для объединения строк
string str5 = strl + str2;
Console.WriteLine( "\nstr5 = strl + snr2 •-=: |0]\n", str5);
// используем метод Copy для копирования строки
String str6 - string.Copy(str5);
Console.WriteLine( "\nstr6 скопирована из str5: jO}\n", str6)
// используем перегруженный оператор копирования
string str7 = str6;
Console.WriteLine("str7 = str6: {0}", str7);
// несколько способов сравнения
// используя метод Equals самого объекта
Console.WriteLine f "\nstr7.Equals(str6)?: {0}",
str7.Equals (str6) ) ;
//используя статический метод Equals
Console.WriteLine( "\nsnr7 и strb равны?; {01",
string.Equals(str7, str6));
//используя оператор =-
Console.MriteLine { "\nstr7 == str6 ?; {0j",
str7 == str6);
//определение длины строки
Работа со строками 221
Console.WriteLine( "\пСтрока str7 имеет длину {0} символов. ",
str7.Length);
//определение символа строки по его индексу
Console.WriteLine(
"Пятым элементом в строке str7 является символ {0}\п",
str7[4]) ;
//сравнение конца строки с входным экземпляром
Console.WriteLine(
"str3:{0]\пЗаканчивается ли эта строка словом \"инструмент\"?: (1}\п",
str3, str3.EndsWith("инструмент") );
//сравнение конца строки с входным экземпляром
Console.WriteLine(
"str3:{0}ХпЗаканчивается ли эта строка словом \"платформа\"?: {1}\п",
str3, str3.EndsWith("платформы") );
//поиск первого вхождения подстроки в строку
Console.WriteLine( @"Первое вхождение слова инструмент "+
"в строку str3 имеет индекс (0)\n", str3.IndexOf("инструмент"));
// вставляем новое слово в строку
string str8 = str3.Insert(str3.IndexOf("приложений"),"мощных " ) ;
Console.WriteLine("str8: (0i\n", str8);
Результат работы программы будет следующий:
сравниваем strl: абвг и str2: АБВГ, результат: -1
Сравниваем без учета регистра
strl: абвг, str2: АБВГ, результат: 0
Создаем str4 путем объединения strl и str2:
абвгАБВГ
str5 = strl + str2 =: абвгАБВГ
str6 скопирована из str5: абвгАБВГ
str7 = str6: абвгАБВГ
str7.Eguals(str6)?: True
222 Раздел I I . Фундаментальные понятия
str7 и str6 равны?: True
str7 == str6 ?: True
Строка str7 имеет длину 8 символов.

Пятым элементом в строке str7 является символ А
str3:C# представляет собой инструмент быстрого создания приложений
для .NET платформы
Заканчивается ли эта строка словом "инструмент"?: False
str3:C# представляет собой инструмент быстрого создания приложений
для .NET платформы
Заканчивается ли эта строка словом "платформа"?: True
Первое вхождение слова инструмент в строку str3 имеет индекс 22
str8: CU представляет собой инструмент быстрого создания мощных
приложений для.
NET платформы
Вы можете использовать различные способы объявления строк. Для
объявления строки str3 я использовал дословное представление строки.
Следует отметить, что вы можете разрывать строку в коде программы
для переноса ее на другую линию. При этом необходимо объединять
разорванные части строки оператором (+). Такая строка будет восприниматься
как единое целое.
string str3 = @"С# представляет собой инструмент " +
"быстрого создания приложений для .NET платформы";
result = string.Compare(strl, str2);
Console.WriteLine{ @"сравниваем strl: {0} и str2: {1}, "+
"результат: {2}\n", strl, str2, result);
В данном случае используется чувствительная к регистру функция
сравнения двух чисел. Функция сравнения всегда возвращает различные
значения, в зависимости от результата сравнения:
• значение меньше нуля, если первая строка меньше второй;
• 0, если строки равны;
• значение больше нуля, если первая строка больше второй.
В нашем случае результат будет следующий:
сравниваем strl: абвг и str2: АБВГ, результат: -1
Буквы нижнего регистра имеют меньшее значение, нежели верхнего,
отсюда и результат.
В следующей функции Compare мы используем сравнение без учета
регистра. Об этом свидетельствует дополнительный третий параметр функции
- true.
Работа со строками 223
result - string.Compare(strl, str2, true);
Console.WriteLine("Сравниваем без учета регистра");
Console.WriteLine(@"strl: {0}, str2: {1}, " +
"результат: {2}\n", strl, str2, result);
Соответственно и результат будет:
Сравниваем без учета регистра
strl: абвг, str2: АБВГ, результат: О
Функция сравнения без учета регистра сначала приводит обе строки к
общему регистру, а затем осуществляет посимвольное сравнивание строк.
В итоге мы получаем последовательность действий:
абвг -" АБВГ, АБВГ = АБВГ ? -" ДА -" результат О
Для объединения строк мы использовали две возможности класса string.
Одна из них - это использование статической функции Concat().
string str4 = string.Concat(strl, str2];
Второй способ - использование оператора (+).
string str5 " strl + str2;
Оператор (+) класса string перегружен таким образом, что выполняет
действие, аналогичное функции Concat(). Однако использование записи
strl+str2 лучше читаемо, поэтому программисты обычно предпочитают
применение операторов вызову функций.
Аналогичное сравнение можно провести между функцией Сору() и
оператором (=). Они выпоняют одно и то же действие - копируют содержимое
одной строки в другую. Разница состоит лишь в записи кода программы:

string str6 = string.Copy(str5);
string str7 = str6;
И str6, и str7 будут в результате иметь то значение, которое записано
в строке str5.
Класс string в С# обеспечивает три способа проверки равенства двух
строк. Первый из них - это использование метода Equals().
str7.Equals(str6)
В данном случае для объекта str7 проверяется равенство ему объекта
str6. Вторым вариантом проверки равенства строк является использование
статической функции string.Equals().
string.Equals (str7, srr6)
Третий вариант - это использование перегруженного оператора (==).
str7 == str6
Любой из этих вызовов возвращает True, если строки равны, и False,
если строки не равны.

Свойство Length возвращает число символов строки. А оператор ([])
возвращает символ строки, имеющий соответствующий индекс.
C o n s o l e . K r i t e L i n e (
"Пятым э л е м е н т о м в с т р о к е s t r 7 я в л я е т с я символ {0}\n", s t r 7 [ 4 J ) ;
Здесь мы пытаемся получить пятый элемент строки, используя число
4 в операторе ([]). Все потому, что элементы строки в С#, как и в C++,
начинаются с нулевого индекса.
224 Раздел I I . Фундаментальные понятия
Строка
Индекс элемента
Порядковый номер элемента
а

0


1


б

1


2


в

2


3


г

3


4


А

4


5


Б

5


6


В

6


7


Г

7


8


Из этой таблицы видно, что пятым символом строки является символ
"А", имеющий индекс 4.
ПОИСК ПОДСТРОКИ
Тип string имеет перегруженный метод Substring() для извлечения подстроки
из строки. Один из методов принимает в качестве параметра
индекс элемента, начиная с которого следует извлечь подстроку. Второй
метод принимает и начальный, и конечный индекс, чтобы указать, где
начать и где закончить поиск. Метод Substring можно рассмотреть на
следующем примере. Программа выводит слова строки в порядке, обратном
последовательности их записи:
using System;
using System.Text;
namespace C_Sharp_Examples
public class StringFinder
static void Main( )
// объявляем строку для обработки
string si = "Один Два Три Четыре";
// получаем индекс последнего пробела
int ix = si.LastlndexOf(" " ) ;
// получаем последнее слово в строке
string s2 = si. Substring (ix-Ы) ;
// устанавливаем si на подстроку начинающуюся
//с 0-ого индекса и заканчивающуюся последним пробелом
si = si.Substring (0, ix) ;
// вновь ищем индекс последнего пробела
ix = si.LastlndexOf(" " ] ;
// устанавливаем s3 на последнее слово строки
string s3 = si.Substring(ix+1);
Работа со строками 225
// сбрасываем si на подстроку
// от нулевого символа до ix
si = si.Substring(0,ix);
// сбрасываем ix на пробел
// между "один" и "два"
ix = si.LastlndexOf (" " ) ;
// устанавливаем s4 на подстроку после ix
string s4 = si. Substring (ix-rl) ;
//устанавливаем si на подстроку от 0 до ix
//получаем только слово "один"
si = si.Substring(0,ix);
// пытаемся получить индекс последнего пробела
// но на этот раз функция LastlndexOf вернет -1
ix = si.LastlndexOf(" " ) ;
// устанавливаем s5 на подстроку начиная с ix-M
// покольку ix = 1, s5 устанавливается на начало si
scring s5 = si.Substring
// Выводим результат
Console.WriteLine ("s2: {0}\ns3: {1}",s2,s3);
Console.WriteLine ("s4: (0}\ns5: {1)\n",s4,s5);
Console.WriteLine ("si: {0}\n",si);
Первым делом объявляем строку и инициализируем ее необходимыми
параметрами.

s t r i n g si = "Один Два Три Четыре";
Затем мы вычисляем позицию последнего пробела в строке. Это необходимо
для того, чтобы определить начало последнего слова строки.
int ix = si.LastlndexOf(" " ) ;
В данном случае значение ix будет равно 12. Слово "Четыре" начинается
с позиции 13. Теперь, когда мы знаем начало последнего слова строки,
можно извлечь его.
string s2 = si.Substringfix+1);
В итоге s2 будет равно "Четыре". Далее мы обрезаем исходную строку
si на слово "Четыре". Для этого необходимо вызвать функцию Substring с
двумя параметрами - начала и конца подстроки. Началом строки у нас
будет начало исходной строки, а концом - индекс последнего пробела.
si = si.Substring(0, ix);
226 Раздел I I . Фундаментальные понятия
Новая строка будет иметь вид "Один Два Три". Теперь мы повторяем
ту же последовательность действий, что и ранее для полной строки. Получаем
индекс последнего пробела, выбираем последнее слово, обрезаем
строку ... Делаем это до тех пор, пока в строке не останется одно слово
"Один". Когда мы попытаемся получить из этой строки индекс символа
пробела, то функция вернет значение -1.
i x = s i . L a s t l n d e x O f ( " " ) ;
Поэтому, при вызове функции SubstringQ и передаче в нее значения
(-1 + 1 = 0), нам вернется полная исходная строка, а именно слово "Один".
string s5 = si.Substring(ix+1);
Результат работы программы будет следующий:
s2: Четыре
S3: Три
s4: Два
s5: Один
si: Один
РАЗБИЕНИЕ СТРОК
По сути, предыдущий пример делал разбор строки на слова, сохранял
найденные слова и выводил их на экран. Более эффективное решение
проблемы, проиллюстрированной в предыдущем примере, состоит в том,
чтобы использовать метод Split() класса string. Метод Split() разбирает
строку в подстроки. Для вьщеления подстрок из исходной строки необходимо
передать методу Split() разделительный символ в

Список страниц

Закладка в соц.сетях

Купить

☏ Заказ рекламы: +380504468872

© Ассоциация электронных библиотек Украины

☝ Все материалы сайта (включая статьи, изображения, рекламные объявления и пр.) предназначены только для предварительного ознакомления. Все права на публикации, представленные на сайте принадлежат их законным владельцам. Просим Вас не сохранять копии информации.