Над строками определены операции сравнения: < > <= >= = <>. Сравнение строк на неравенство осуществляется лексикографически: s1 < s2 если для первого несовпадающего символа с номером i s1[i] Операция + для строк означает конкатенацию (слияние) строк. Например: 'Петя'+'Маша' = 'ПетяМаша'. Расширенный оператор присваивания += для строк добавляет в конец строки - левого операнда строку - правый операнд. Например: var s: string := 'Петя'; s += 'Маша'; // s = 'ПетяМаша' Строка может складываться с числом, при этом число предварительно преобразуется к строковому представлению: s := 'Ширина: '+15; // s = 'Ширина: 15' s := 20.5+''; // s = '20.5' s += 1; // s = '20.51' Над строками и целыми определена операция *: s*n и n*s означает строку, образованную из строки s, повторенной n раз: s := '*'*10; // s = '**********' s := 5*'ab' // s = 'ababababab' s := 'd'; s *= 3; // s = 'ddd' Строки реализуются типом System.String платформы .NET и представляют собой ссылочный тип. Таким образом, все операции над строками унаследованы от типа System.String. Однако, в отличие от .NET - строк, строки в PascalABC.NET изменяемы. Например, можно изменить s[i] (в .NET нельзя). Более того, строки string в PascalABC.NET ведут себя как размерные: после var s2 := 'Hello'; var s1 := s2; s1[2] := 'a'; строка s2 не изменится. Аналогично при передаче строки по значению в подпрограмму создается копия строки, т.е. обеспечивается поведение, характерное для Delphi Object Pascal, а не для .NET. Однако, строке можно присвоить nil, что необходимо для работы с NET-кодом. Кроме того, в PascalABC.NET реализованы размерные строки. Для их описания используется тип string[n], где n - константа целого типа, указывающая длину строки. Размерные строки, в отличие от обычных, можно использовать как компоненты типизированных файлов. Для совместимости с Delphi Object Pascal в стандартном модуле описан тип shortstring=string[255]. Стандартные подпрограммы работы со строками. Члены класса string. Тип string в PascalABC.NET является классом и содержит ряд свойств, статических и экземплярных методов, а также методов расширения. В методах класса string считается, что строки индексируются с нуля. Кроме того, ни один метод не меняет строку, т.к. строки в .NET являются неизменяемыми. Свойство Описание s[i] Индексное свойство. Возвращает или позволяет изменить i-тый символ строки s. Строки в PascalABC.NET индексируются от 1. Length: integer Возвращает длину строки Статические методы класса String Метод Описание String.Compare(s1,s2: string): integer Сравнивает строки s1 и s2. Возвращает число <0 если s1 String.Compare(s1,s2: string; ignorecase: boolean): integer То же. Если ignorecase=True, то строки сравниваются без учета регистра букв String.Format(fmtstr: string, params arr: array of object): string; Форматирует параметры arr согласно форматной строке fmtstr String.Join(ss: array of string; delim: string): string Возвращает строку, полученную слиянием строк ss с использованием delim в качестве разделителя Экземплярные методы класса String Отметим, что все экземплярные методы не меняют строку, как это может показаться на первый взгляд, а при необходимости возвращают измененную строку. Кроме того, считается, что символы в сроке индексируются с нуля. Метод Описание Contains(s: string): boolean Возвращает True, если текущая строка содержит s, и False в противном случае EndsWith(s: string): boolean Возвращает True, если текущая строка заканчивается на s, и False в противном случае IndexOf(s: string): integer Возвращает индекс первого вхождения подстроки s в текущую строку или -1 если подстрока не найдена IndexOf(s: string; start,count: integer): integer Возвращает индекс первого вхождения подстроки s в текущую строку или -1 если подстрока не найдена. Поиск начинается с символа с номером start и распространяется на следующие count символов IndexOfAny(cc: array of char): integer Возвращает индекс первого вхождения любого символа из массива сс Insert(from: integer; s: string): string Возвращает строку, полученную из исходной строки вставкой подстроки s в позицию from LastIndexOf(s: string): integer Возвращает индекс последнего вхождения подстроки s в текущую строку LastIndexOf(s: string; start,count: integer): integer Возвращает индекс последнего вхождения подстроки s в текущую строку или -1 если подстрока не найдена. Поиск начинается с символа с номером start и распространяется на следующие count символов LastIndexOfAny(a: array of char): integer Возвращает индекс последнего вхождения любого символа из массива сс PadLeft(n: integer): string Возвращает строку, полученную из исходной строки выравниванием по правому краю с заполнением пробелами слева до длины n PadRight(n: integer): string Возвращает строку, полученную из исходной строки выравниванием по левому краю с заполнением пробелами справа до длины n Remove(from,len: integer): string Возвращает строку, полученную из исходной строки удалением len симолов с позиции from Replace(s1,s2: string): string Возвращает строку, полученную из исходной строки заменой всех вхождений подстроки s1 на строку s2 Split(params delim: array of char): array of string Возвращает массив строк, полученный расщеплением исходной строки на слова, при этом в качестве разделителей используется любой из символов delim (по умолчанию - пробел) StartsWith(s: string): boolean Возвращает True, если текущая строка начинается на s, и False в противном случае Substring(from,len: integer): string Возвращает подстроку исходной строки с позиции from длины len ToCharArray: array of char Возвращает динамический массив символов исходной строки ToLower: string Возвращает строку, приведенную к нижнему регистру ToUpper: string Возвращает строку, приведенную к верхнему регистру Trim: string Возвращает строку, полученную из исходной удалением лидирующих и завершающих пробелов TrimEnd(params cc: array of char): string Возвращает строку, полученную из исходной удалением завершающих символов из массива cc TrimStart(params cc: array of char): string Возвращает строку, полученную из исходной удалением лидирующих символов из массива cc Некоторые методы расширения - стандартные для .NET, некоторые реализованы только в PascalABC.NET. Метод Описание Inverse: string Возвращает инверсию строки Print Выводит буквы строки, разделенные пробелом Println Выводит буквы строки, разделенные пробелом, и осуществляет переход на новую строку ReadInteger(var from: integer): integer Считывает из строки целое число с позиции from и возвращает его. Позиция from при этом увеличивается на считанный элемент ReadReal(var from: integer): real Считывает из строки вещественное число с позиции from и возвращает его. Позиция from при этом увеличивается на считанный элемент ReadWord(var from: integer): string Считывает из строки слово до пробела или до конца строки с позиции from и возвращает его. Позиция from при этом увеличивается на считанный элемент ToInteger: integer Преобразует строку к целому и возвращает его. Если это невозможно, генерируется исключение ToIntegers: array of integer В строке должны храниться целые, разделенные пробелами. Возвращается массив целых. Если это невозможно, генерируется исключение ToReal: real Преобразует строку к вещественному и возвращает его. Если это невозможно, генерируется исключение ToReals: array of real В строке должны храниться вещественные, разделенные пробелами. Возвращается массив вещественных. Если это невозможно, генерируется исключение ToWords(params delim: array of char): array of string Возвращает массив строк, полученный расщеплением исходной строки на слова, при этом в качестве разделителей используется любой из символов delim (по умолчанию - пробел). В отличие от s.Split не включает в итоговый массив пустые строки. В частности, это означает, что слова могут быть разделены несколькими разделителями delim