Символ – это один знак. Любой – буква, цифра, арифметический знак или пробел, знак препинания или подчеркивания... А также специальные символы – переход на новую строку, BackSpace, знак доллара или процент.
Символьный тип Char определяет упорядоченную совокупность символов, допустимых в данной ЭВМ. Каждому символу приписывается целое число в диапазоне 0...255. Это число служит кодом внутреннего представления символа, его возвращает функция ORD.
Для кодировки используется код ASCII (American Standard Code for Information Interchange - американский стандартный код для обмена информацией). Это 7-битный код, т.е. с его помощью можно закодировать лишь 128 символов в диапазоне от 0 до 127. В то же время в 8-битном байте, отведенном для хранения символа в Турбо Паскале, можно закодировать в два раза больше символов в диапазоне от 0 до 255. Первая половина символов ПК с кодами 0...127 соответствует стандарту ASCII. Вторая половина символов с кодами 128...255 не ограничена жесткими рамками стандарта и может меняться на ПК разных типов.
Мы уже говорили, что символы берутся из таблицы символов ANSI или UNICODE. Большинство символов используются пользователями, некоторые символы являются служебными. Обратите внимание, что большая буква "А" и маленькая "а" - это разные символы! Также разными символами являются латинская "с" и русская "с", хотя они похожи, как две капли воды.
Нулевой символ не используется, он зарезервирован как полный нуль. Программисты нашли достойное применение этому символу, используя его в событиях ввода текста, когда требуется запретить пользователю ввод каких-либо символов. Служебные символы мы не можем увидеть в текстовом поле. Служебные символы, это <Esc>, <Enter>, <Tab> и другие. Каждый символ обрабатывается компьютером как число от 0 до 255, таким образом, слово "ПРИВЕТ" в памяти машины будет выглядеть как набор цифр: "207 208 200 194 197 210".
var c : Char;begin c := 'В'; ShowMessage('Вы ввели ' + c); c := #13; ShowMessage('Переход на новую' + c + 'строку');
Значение символьной переменной или константы – это один символ из допустимого набора. Символьная константа может записываться в тексте программы тремя способами:
•как один символ, заключенный в апострофы, например:
'A' 'a' 'Ю' 'ю';
•с помощью конструкции вида #K, где K - код соответствующего символа, при этом значение K должно находиться в пределах 0..255;
•с помощью конструкции вида ^C, где C - код соответствующего управляющего символа, при этом значение C должно быть на 64 больше кода управляющего символа.
К величинам символьного типа применимы все операции отношения.
Поскольку для компьютера символ – число, то символьные данные можно сравнивать между собой. При этом большим будет тот символ, число которого в таблице символов больше. Например, 'я' будет больше, чем 'а':
if b > c then ShowMessage('Истина!')else ShowMessage('Ложь!');
Для величин символьного типа определены две функции преобразования
Ord(C) Chr(K).
Первая функция определяет порядковый номер символа С в наборе символов, вторая определяет по порядковому номеру К символ, стоящий на К-ом месте в наборе символов. Порядковый номер имеет целый тип. К аргументам символьного типа применяются функции, которые определяют предыдущий и последующий символы:
При отсутствии предыдущего или последующего символов значение соответствующих функций не определено. Для литер из интервала 'a'..'z' применима функция UpCase(C), которая переводит эти литеры в верхний регистр 'A'..'Z'.
a := Chr(200); i := Ord(a);i := Ord('f');
В первой строке в переменную a мы записали символ "И", которому в таблице символов соответствует номер 200. Во вторую, целую переменную, мы записали число 200, так как символ с этим номером был записан в переменную a, которую мы передали в качестве параметра. Наконец, в третьей строке мы в целую переменную записали число 102, этот номер соответствует символу "f".
Строковый тип String (ShortString для Delph) можно рассматривать как одномерный массив, описанный как array[0..255] of char. Поэтому обращение к конкретному символу строки можно осуществлять по его индексу, например, S[12] - обращение к 12-му символу строки S. Индекс 0 считается служебным и служит для хранения длины строки.
i := ord(s[0] ) ; {i - текущая длина строки}
Максимальную длину строки можно задать при объявлении переменной, например, S: string[80].
Для строк допустимо выполнение операции сложения, например, S: = 'Первая '+'строка'. Если длина сцепленной строки превысит максимально допустимую длину N, то «лишние» символы отбрасываются.
Так как каждому символу соответствует определенный числовой код, то строки можно сравнивать между собой, например, 'АВ'>'А' значение True, т.к. более короткая строка имеет меньший код. Операции отношения =, <>, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением СНR(0) . Следующие операции отношения дадут значение TRUE:
'''' < ' . ' 'А' > '1' 'Turbo' <' Turbo Pascal'
Для работы со строками могут применяться стандартные функции и процедуры:
Функция
Описание
Length(S)
Определяет длину строки в символах
Pos(SubS,S)
Поиск подстроки SubS в строке S
Copy(S,i,n)
Копирование n символов из строки S начиная с позиции i
Concat(S1[,S2...])
Объединение строк
Delete(S,i,n)
Удаление n символов из строки S начиная с позиции i
Insert(SubS,S,i)
Вставка подстроки SubS в строку S начиная с позиции i
Str(X[:m:n],S)
Перевод числа X в строку S
Val(S,X,c)
Перевод строки S в число X. с - код результата перевода
· CONCAT(S1 [,S2, ... , SN] ) - функция типа STRING; возвращает строку, представляющую собой сцепление строк-параметров SI, S2, ..., SN.
· COPY(ST, INDEX, COUNT) - функция типа STRING; копирует из строки ST COUNT символов, начиная с символа с номером INDEX.
· DELETE (ST, INDEX, COUNT) - процедура; удаляет СОUNT символов из строки ST, начиная с символа с номером INDEX.
· INSERT (SUBST, ST, INDEX) - процедура; вставляет подстроку SUBST в строку ST, начиная с символа с номером INDEX.
· LENGTH (ST) - функция типа INTEGER; возвращает длину строки ST.
· POS (SUBST, ST) - функция типа INTEGER; отыскивает в строке ST первое вхождение подстроки SUBST и возвращает номер позиции, с которой она начинается; если подстрока не найдена, возвращается ноль.
· STR (X [; WIDTH [: DECIMALS] ], ST) - процедура; преобразует число X любого вещественного или целого типов в строку символов ST так, как это делает процедура WRITELN перед выводом; параметры WIDTH и DECIMALS, если они присутствуют, задают формат преобразования: WIDTH определяет общую ширину поля, выделенного под соответствующее символьное представление вещественного или целого числа X, a DECIMALS - количество символов в дробной части (этот параметр имеет смысл только в том случае, когда Х- вещественное число).
· VAL(ST, X, CODE) - процедура; преобразует строку символов ST в целую или вещественную переменную X, что определяется типом этой переменной; параметр CODE содержит ноль, если преобразование прошло успешно, и тогда в X помещается результат преобразований, в противном случае он содержит номер позиции в строке ST, где обнаружен ошибочный символ, и в этом случае содержимое Х не меняется;
· UPCASE (СН) - функция типа CHAR; возвращает для символьного выражения СН, которое должно представлять собой строчную латинскую букву, соответствующую заглавную букву; если значением СН является любой другой символ (в том числе строчная буква русского алфавита), функция возвращает его без преобразования.
var х : Real; у : Integer; st,st1: String; begin st := concat('12','345'); {строка st содержит 12345} st1 := copy(st,3,Length(st)-2); {st1 содержит 345} insert('-',st1,2); {строка st1 содержит 3-45} delete(st,pos('2',st),3); {строка st содержит 15} str (pi:6:2,st); {строка st содержит 3.14} val (st, x, y) ; {у = 0, х = 3,1415} end. //разложение строки на отдельные слова var S : string; i,n : integer; Mas : array[1..100] of string;begin writeln('Введите строку'); readln(S); n := 0; repeat i := Pos(' ',S); if i>0 then begin inc(n); Mas[n] := Copy(S,1,i-1); Delete(S,1,i); end; until i=0; if Length(S)>0 then begin inc(n); Mas[n] := S; end; for i := 1 to n do writeln(Mas[i]);end.