Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.108.241] |
|
Сообщ.
#1
,
|
|
|
- Символы и Строки - Теория: Язык Турбо Паскаль поддерживает стандартный символьный тип Сhar и, кроме того, строки, описываемые типом String или String[n]. Значение типа Char - это символ из алфавита ЭВМ, заключенный в одинарные кавычки, например, 'A', '7'. Кроме этой классичекой записи существуют еще две. Одна из низ - представление символа его кодом ASCII с помощью префикса #: #97 = Chr(97) = 'a' (символ 'a') #0 = Chr(0) (нулевой символ) #32 = Chr(32) = ' ' (пробел) Символы, имеющие коды от 1 до 31 (управляющие), могут быть представлены их "клавиатурными" обозначениями - значком "^" и буквой алфавита (для диапазона кодов 1..26) или управляющим символом (для диапазона 27..31): ^A = #1 = Chr(1) - код 1 ^B = #2 = Chr(2) - код 2 ... ^Z = #26 = Chr(26) - код 26 ^[ = #27 = Chr(27) - код 27 ... ^_ = #33 = Chr(33) - код 33 Рассмотрим более подробно строковый тип. Максимальный длина строки составляет 255 символов. Строки называются динамическими, поскольку могут иметь различные длины в пределах объявленных границ. Например, введя переменные Var S32 : String[32]; S255 : String[255]; мы может в S32 строчные значения, длиной не более 32 символов, а в S255 - не более 255. Описание String без указания длины отводит место, как и описание String[255]. При попытке записать в переменную строку длиннее, чем было объявлено в описании, "лишняя" часть будет отсечена. Можно присваивать и пустые строки. Их обозначение '' (две одинарных кавычки подряд). Значением строки может быть любая последовательность символов, заключенных в одинарные кавычки: 'abcde' '123332' ' ' '' '''' Последняя конструкция есть строка из одной одинарной кавычки. Можно, вообще говоря, рассматривать строки как массивы символов. Любой символ из строки можно изъять по его номеру: Var I : Byte ; S : String[20]; Begin S := 'Это Массив символов'; For I := 1 to 20 do WriteLn(S[I]); End. Следует заметить, что в нулевом элементе строки содержится байт, содержащий длину строки. Можно получить длину строки следующим образом: Var L : Byte ; S : String; Begin S := '12345'; L := Byte(S[0]); { В L теперь содержится длина строки, в данном случае - 5 } End. Отдельные символы совместимы с типом char, и над ними можно производить те же действия: Var S : String; Ch : Char ; Begin S := 'Hello, World!' Ch := S[1]; { сейчас Ch = 'H' } S[2] := UpCase(S[2]); { S теперь равна 'HEllo, World!' } End. Заполнение строки одинаковым символом: Var S : String; Begin FillChar(S[1], 80, 'P'); { Пишем в строку 80 букв P } S[0] := Char(80); { Устанавливаем длину строки в 80 символов } End. |
Сообщ.
#2
,
|
|
|
Продолженние строк. Наконец-то
Операции над строками Получение длины строки: Function Length(S : String) : Integer; Возвращает длину строки S. Тоже самое можно получить, как было сказано выше, прочитав нулевой байт строки. Пример: Var I : Integer; S : String ; Begin S := '12345'; I := Length(S); { I теперь содержит 5 } I := byte(S[0]); { И все равно 5 :) } {V. S[0] имеет тип char, и нужно явное преобразование до байта.} End. Конкатенация (слияние) строк Чтобы "склеить"две строки достаточно просто применить к ним оператор "+". Например: Var S1, S2, S3 : String; Begin S1 := 'Мама '; S2 := 'мыла '; S3 := S1 + S2; S3 := S3 + 'раму'; WriteLn(S3); { Выведет на экран "Мама мыла раму" } End. На самом деле, оператор "+" - эквивалент функции Concat: Function Concat(s1, [s2... sn] : String) : String; Несложно догадаться, как она работает: Var S1, S2, S3 : String; Begin S1 := 'Мама '; S2 := 'мыла '; S3 := 'раму'; WriteLn(Concat(S1, S2, S3)); { Выведет на экран все ту же бессмертную фразу } End. Получение части строки Function Copy(S : String; Index : Integer; Count : Integer) : String; Возвращает строку, длиною Count символов, вырезанную из строки S, начиная с символа с номером Index. Если Index больше длины строки S, эта функция вернет пустую строку. Если Count больше, чем символов "осталось" в строке, то Copy вернет только "остаток" строки (начиная с Index символа). Пример: Var S, S2 : String; Begin S := 'Форум на Исходниках.РУ'; S2 := Copy(S, 10, 13); { S2 теперь содержит "Исходниках.РУ" } End. Удаление подстроки Procedure Delete(Var S : String; Index : Integer; Count : Integer); Эта процедура удаляет из строки S Count байт, начиная с позиции Index. Если Index больше, чем длина строки, эта процедура ничего не делает. Если Count больше, чем осталось символов в строке, Delete удаляет все символы до конца строки. Использование: Var S : String; Begin S := 'Мама не мыла раму'; Delete(S, 5, 3); { Удалить из строки S три символа, начиная с пятого. Теперь S равна "Мама мыла раму" } End. Вставка подстроки Procedure Insert(Source : String; Var S : String; Index : Integer); Это процедура вставляет в строку S подстроку Source. Вставка производится с символа с номером Index. Var S : String; Begin S := 'Мама раму'; Insert('мыла ', S, 5); { ну думаю, совсем несложно догадаться... } End. Примечание. При использовании Turbo Vision нужно часто использовать префикс System, так как многие объекты имеют метод с именем Insert. Например System.Insert(params) Поиск подстроки Function Pos(Substr : String; S : String) : Byte; Ищет подстроку Substr в строке S и возвращает позицию в строке, где найдено первое вхождение. Если подстрока не найдена, возвращает 0. Пример: Var S : String; Begin S := 'abacacb'; WriteLn(Pos('ba', S)); { На экран будет выведено 2 } End. |
Сообщ.
#3
,
|
|
|
Лекция по теме "Строки" с примерами (Word document, 53 кб)
Материал прислал e-moe, за что ему спасибо. Прикреплённый файлstrings.zip (52.62 Кбайт, скачиваний: 1115) |
Сообщ.
#4
,
|
|
|
Функции модуля Stringz.pas
Function LowCase (C:Char): Char; { 'StRIng' -> 'string' } Function RUpCase (Ch: Char): Char; { 'я' -> 'Я' } Function RLowCase (Ch:Char): Char; { 'Я' -> 'я' } Function RLowStr (S:String): String; { 'Russian Язык' -> 'русский язык' } Function RUpperStr (s:string): String; { 'Russian Язык' -> 'RUSSIAN ЯЗЫК' } Function UpStr (S:string): String; { 'Pascal' -> 'PASCAL' } Function LowStr (s:string): String; { 'Turbo' -> 'turbo' } Function ReplaceChar (S:String; OldChar,NewChar:char): String; { Замена в строке S всех символов OldChar на NewChar } Function ReplaceAll (S:string;const Search,Repl:string): String; { Замена в строке S всех вхождений Search на Repl } Цитата А вы знаете что в DOS есть функции преобразования строки в верхний и нижний регистры, и если в CONFIG.SYS стоит COUNTRY=007, они корректно работают с русскими буквами. Function Upcase (C:Char): Char; assembler; asm mov AX,6520H mov DL,C int 21H mov AL,DL end; Цитата А можно за один вызов перевести в верхний регистр целую строку String или PChar. Это подфункции 21H и 22H той же функции 65H Вариант для String приведу, а для PChar пишите сами - он проще. Procedure UpString (var S: String); assembler; asm Push DS LDS BX,S XOR CX,CX MOV CL,[BX] {;Длина строки в CX} INC BX MOV DX,BX {; DS:DX- указатель на первый символ} MOV AX,6521H INT 21H POP DS end; Цитата Для подфункции 22H указатель на ASCIIZ строку передается в тех же DS:DX Прикреплённый файлSTRINGZ.zip (0.94 Кбайт, скачиваний: 633) |