Ранее мы познакомились с типом данных char. Переменные этого типа — символы, в частности, буквы. Сегодня вы узнаете ещё один очень удобный тип данных — String, что в переводе с английского означает “строка”. Переменные этого типа — строки символов. Вам уже неоднократно приходилось в различных ситуациях пользоваться строками для вывода информации с помощью операторов Write и Writeln.
Например: Writeln(‘Текст заключённый в кавычки — это и есть строка.’); Для объявления строковых типов и переменных используется служебное слово STRING, вслед за которым в квадратных скобках указывается максимальная длина строки. Например: VAR s1: string[70]; s2: string; или TYPE Line1: string[70]; Line2: string; VAR s1: Line1; s2: Line2; В приведённых выше примерах переменная s1 в качестве своего значения может иметь любую последовательность символов (каждый из которых имеет тип char) длиной от 0 до 70 символов.
В Турбо Паскале максимальная длина строки не может превышать 255 символов. Если размер строки не указан, он считается равным 255. Поэтому переменная s2 может иметь последовательность символов произвольной длины до 255 символов. Значение строковой переменной может быть присвоено оператором присваивания, либо введено оператором ввода: s1 := ‘Пример строки.’; Readln(s1); В случае присваивания строковой переменной строкового выражения с длиной большей, чем максимально допустимая для данной переменной, происходит «обрубание» строки до максимальной длины. Для строковых величин определена операция сложения “ +” : VAR s: string[20]; BEGIN s := ‘Turbo ‘ + ‘Pascal’; Writeln(s1); END.
Турбо Паскаль. Обработка строк. Задача нахождения цифр в строке. Урок 59
Одесский колледж компьютерных технологий “СЕРВЕР” Важнейшее отличие строк от обычных символьных массивов заключается в том, что строки могут динамически изменять свою длину. Например, если после присваивания att := ‘Короткая строка’; длина строки составит 15 символов, то следующее присваивание att := att + ‘ стала длиннее’; увеличит её длину до 29 символов.
Функции для работы со строками . Length (S) Возвращает текущий размер строки. S — строка, у которой определяется размер.
Copy (S; I; C) Создаёт подстроку строки S. S — исходная строка; I — номер первого, выделяемого символа строки, (если значение больше длины строки, возвращается пустая строка); C — число выделяемых символов (если всех необходимых символов в строке нет, возвращается имеющийся остаток строки). Pos (P,S) Поиск последовательности P в строке S (результат равен номеру первого символа строки S, с которого начинается искомая последовательность, или 0, если такой последовательности в строке нет).
Var a : string; k : integer; Begin a := ‘абракадабра’; k := Pos(‘кад’,a); writeln(k); readln End. В результате работы такой программы на экран будет выведено 5, так как подстрока ‘кад’ начинается в строке a с 5-ой позиции.
Процедуры для работы со строками . Delete (S, I, C) Удаляет подстроку из строки S. I — номер первого удаляемого символа (если номер больше размера строки, символы не удаляются); C — число удаляемых символов (если символов в строке недостаточно, удаляется остаток символов). Insert (P, S, I) Помещает подстроку P в строку S (если получается строка слишком большого размера, то она усекается до 255 символов). S — исходная строка; P — подстрока, помещаемая в строку; I — номер позиции исходной строки, начиная с которой помещается подстрока. Например,если a := ‘ясный день’; Insert(‘ солнечный’,6,a); то в результате получится новая строка а – ‘ясный солнечный день’. Str (x [: w [: d]],st) преобразует число x любого вещественного или це- лого типов в строку st так, как это делает writeln перед выводом: w определя-
PASCAL.Строки.Решение задач.
Одесский колледж компьютерных технологий “СЕРВЕР” ет общую ширину поля, выделенного под соответствующее символьное представление числа x, а d — количество символов в дробной части. Val(st,x,code) преобразует строку символов st во внутреннее представление целой или вещественной переменной; параметр code содержит 0,если преобразование прошло успешно, в противном случае он содержит номер позиции в строке st, где обнаружен ошибочный символ, и в этом случаен содержимое x не меняется. В начале строки st могут быть пробелы, а в конце — нет. Например, обращение Val (‘ 123’,k,i) пройдёт успешно: k получит значение 123, в i будет помещён 0, в то время как обращение Val (‘123 ‘,k,i) будет ошибочным: значение k не изменится, а i будет содержать 4.
Пример: |
VAR x : real; |
y : integer; |
st,st1 : string; |
BEGIN |
st := ‘12’+’345’; |
st1 := copy(st, 3, Length (st) -2); |
insert (‘-‘, st1,2); |
delete (st, pos(‘2’, st),3); |
str (pi:6:2,st); |
val (‘3,1415’, x,y); END. Строки можно сравнивать между собой. Операции отношения =,<>, >, =, <= выполняются посимвольно, слева направо с учётом кодов символов. Если одна строка короче другой, недостающие символы короткой строки заменяются значением chr(0). Например, ‘aaa’<’ccc’, ‘abc’<’abcd’.
Доступ к отдельным символам строк производится аналогично доступу к элементам одномерного массива: после имени строковой переменной необходимо в квадратных скобках указать номер символа (элемента) строки. Распространённой ошибкой является работа с элементами строки без учёта её текущей длины, что иллюстрирует следующий пример программы: VAR Str: string[26]; i: integer; BEGIN Str := ‘A’; for i:=1 to 26 do Str[i] := Chr(Ord(‘A’)+i-1); Writeln(Str); END.
Источник: studfile.net
Строковый тип данных в Паскале
Строки в Паскале – это данные типа string. Они используются для хранения последовательностей символов. В Паскале длина стандартной строки ограничена 255 символами. Под каждый символ отводится по одному байту, в котором хранится код символа. Кроме того, каждая строка содержит еще дополнительный байт, в котором хранится длина строки.
Если заранее известно, что длина строки будет меньше 255 символов, то программист может сам задать максимальную длину строки.
Примеры описания строк:
type str_type = string[12]; const n = 50; var s1: string; s2, s3: str_type; s4: string[n]; s5, s6, s7: string[7];
Длина строки хранится в первом ее байте, индекс которого равен 0.
Объявление типизированной константы для типа string выглядит так:
const s: string = ‘FreePascal’
Существует понятие пустой строки, то есть строки, в которой нет ни одного символа. Пустая строка обозначается двумя рядом стоящими апострофами (например, st := » ).
Операции над строками
Строки можно присваивать друг другу. Если максимальная длина переменной слева меньше длины присваиваемой строки, то лишние символы справа отбрасываются.
s1 := ‘this is text’; s2 := s1;
Строки можно объединять с помощью операции конкатенации, которая обозначается знаком + .
s1 := ‘John’; s2 := ‘Black’; s1 := s1 + ‘ ‘ + s2;
Строки можно сравнивать друг с другом с помощью операций отношения. При сравнении строки рассматриваются посимвольно слева направо, при этом сравниваются коды соответствующих пар символов. Строки равны, если они имеют одинаковую длину и посимвольно эквивалентны.
В строках разной длины существующий символ всегда больше соответствующего ему отсутствующего символа. Меньшей будет та строка, у которой меньше код первого несовпадающего символа (вне зависимости от максимальных и текущих длин сравниваемых строк).
‘abc’ > ‘ab’ (true) ‘abc’ = ‘abc’ (true) ‘abc’ < ‘abc ‘ (false)
Имя строки может использоваться в процедурах ввода-вывода. При вводе в строку считывается из входного потока количество символов, равное длине строки или меньшее, если символ перевода строки (который вводится нажатием клавиши Enter ) встретится раньше. При выводе под строку отводится количество позиций, равное ее фактической длине.
readln(s1); write(s1);
К отдельному символу строки можно обращаться как к элементу массива символов, например s1[3] . Символ строки совместим с типом char, их можно использовать в выражениях одновременно, например:
s1[3] := ‘h’; writeln(s2[3] + ‘r’);
Можно осуществлять коррекцию любого символа строковой переменной, для чего в соответствующем операторе достаточно указать имя переменной типа string , вслед за которым в квадратных скобках задается номер ее элемента (например, str[3] := ‘j’ ).
Элементы строки нумеруются с единицы, так как в каждой строковой переменной имеется элемент с номером 0, в котором в виде символа хранится длина текущей строки. Чтобы узнать текущую длину, достаточно применить функцию ord к нулевому элементу строки. Например:
writeln(ord(st[0]))
Нулевой элемент строковой переменной можно корректировать. При этом будет изменяться текущая длина строки. Например, выражение str[0] := #50 устанавливает текущую длину равной 50.
Источник: pas1.ru
Иллюстрированный самоучитель по Turbo Pascal
Среда Турбо Паскаль 7.0 обладает весьма интересным новшеством: в ней введена поддержка длинных строк, т.е. строк, длина которых может превышать 255 байт. Как известно, тип String в Турбо Паскале имеет максимальную длину 255 байт. Это связано с тем, что истинная длина строки в этом типе указывается первым байтом, мощность которого не позволяет определять строки большей длины. В то же время в языке С используется другой подход к заданию текстовых строк: первый байт строки является ее первым символом, второй байт – вторым символом и т.д. пока не встретится байт с символом #0.
Таким образом, длина строки не указывается явно, как в типе String, а определяется по замыкающему символу #0. Ясно, что такие строки могут иметь произвольную длину, ограничиваемую лишь объемом оперативной памяти или принятой схемой ее адресации: в MS-DOS такой границей является длина сегмента, поэтому максимально возможная длина С-строки для ПК составляет 65535 символов. Такие строки в дальнейшем будем называть ASCIIZ-строками.
Для реализации операций над ASCIIZ-строками в язык введен новый тип PChar, определяемый как указатель на символ:
type PChar =Char;
Однако такой обычный для Паскаля тип-указатель в рамках Турбо Паскаля 7.0 трактуется необычным способом: считается, что он указывает на цепочку символов, заканчивающуюся терминальным нулем, т.е. на ASCIIZ-строку. Более того, с этим типом совместим любой одномерный символьный массив с нулевой левой границей, а переменные типа PChar можно индексировать, как если бы они были массивами символов. Следующая программа напечатает все заглавные буквы английского алфавита:
var Chars: array [0..26] of Char; PChars: PChar; k: Integer; begin for k: = 0 to 25 do Chars[k]: = Chr(k+ord(‘A’); PChars: = Chars; PChars[26]: = #0; WriteLn(PChars) end.
Три последние оператора программы недопустимы в стандартном Паскале и в ранних версиях Турбо Паскаля, но возможны в версии 7.0, если включен расширенный синтаксис (директивой или опцией Options/Compiler/Extended syntax). Обратите внимание: процедура WriteLn этой версии умеет работать с ASCIIZ-строками.
Для поддержки ASCIIZ-строк разработан модуль Strings, в котором реализованы необходимы процедуры и функции.
Функция StrCat
Function StrCat(Dest, Source: PChar): PChar;
Копирует строку Source в конец строки Dest и возвращает указатель на начало Dest.
Функция StrComp
Function StrComp(Strl, Str2: PChar): Integer;
Побайтно сравнивает строку Strl со строкой Strl и возвращает следующий результат:
=0 Strl=Str2; >0 Strl>Str2;
Источник: samoychiteli.ru