КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Строки символов
Строкового типа в стандартном Паскале нет, поэтому там использовали символьные массивы при работе со строками символов. Символьные строки представляют один из наиболее полезных и важных типов данных. Для определения строкового типа в Турбо-Паскале используется ключевое слово string, вслед за которым в квадратных скобках указывается максимальная длина строки, например: type line = string[80]; var line1,line2: line; Переменная line1 в качестве своего значения может иметь любую последовательность символов произвольной длины (в пределах от нуля до 80). Значение строковой переменной может быть присвоено с помощью оператора присваивания или процедуры ввода: line1:='программирование'; readln(line2); Если указание длины строки опущено, то длина строки по умолчанию является максимально возможной и равна 255 символов. Важнейшим отличием строк от символьного массива является то, что строки могут динамически менять свою длину. При этом необходимо помнить, что память выделяется по максимуму. Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки. Для строк символов определена операция конкатенация, обозначаемая символом '+', смысл которой заключается в формировании новой символьной строки, значением которой будут строки-операнды, расположенные последовательно друг за другом. Например: line1:=line1+'-экзамен'; При выводе line1 получим строку: пpогpаммиpование-экзамен. Кроме операции конкатенации, над значениями строкового типа определены операции сравнения с обычным смыслом: < <= > >= = <> при выполнении которых действуют следующие правила: более короткая строка всегда меньше длинной; а если длины сравниваемых строк равны, то происходит поэлементное сравнение символов этих строк с учетом лексикографической упорядоченности значений стандартного символьного типа char. Доступ к отдельным элементам строк производится аналогично доступу к элементам одномерного массива: после имени строковой переменной необходимо в квадратных скобках указать выражение целого типа, обозначающее номер элемента строки. Данная конструкция имеет тип char и является переменной, т.е. может находиться в левой части оператора присваивания: line[1]='П' или if line[i] in ['a'..'z'] then k:k+1; Рассмотрим пример пpогpаммы, опpеделяющей количество знаков пpепинания в пpоизвольной стpоке символов:
program pr25; var str: string; i, k: integer;{Количество знаков пpепинания} begin writeln('Введите стpоку символов:'); read (str); for i:=1 to length(str) do {length(str)определяет длину текущей строки} if str[i] in [':','.',',','"','!','?',';'] then k:=k+1; writeln('k=',k); end. Распространенной ошибкой при работе со строками является работа с элементами строки без учета её текущей длины. Следующая программа будет формировать строку из 26 символов, представляющих последовательность заглавных букв латинского алфавита: program pr27; var str: string[26]; i:integer; begin str:=''; for i:=1 to 26 do str:=str+chr(ord('A')+i-1); writeln(str); end. В Турбо-Паскале имеются встроенные функции и процедуры для обработки строк: concat(str1[,str2,...,strn]) - функция, возвращающая строку, представляющую собой сцепление строк параметров str1,str2,...,strn; copy(str,i,c) - функция, возвращающая строку, которая копируется из строки str, начиная с символа i длиной с символов; delete(str,i,c) - процедура, удаляющая из строки str с символов, начиная с символа с номером i; insert(subsrt,str,i) - процедура, вставляющая подстроку substr в строку str, начиная с символа с номером i; pos(substr,str) - функция, возвращающая номер позиции в строке str, начиная с которой подстрока substr входит в строку str; если подстрока не найдена, возвращается нуль. Здесь представлены наиболее часто используемые функции. Приведем пример программы, опpеделяющей количество символов и слов в пpоизвольной стpоке символов [4]. program pr28; const YES=1; {Константы, опpеделяющие является ли } NO=0; { текущий символ элементом слова} var str: string; nw, {Количество слов} nc, {Количество символов} inword: integer; {Пеpеменная, пpинимающая значения констант YES или NO} i: integer; begin writeln('Введите стpоку символов:'); read (str); nw:=0;nc:=0;inword:=NO; for i:=1 to length(str) do begin nc:=nc+1; if str[i] in [':','.',',','"','!','?',';',' ']{Если pазделитель,} then inword:=NO {то текущий символ вне слова} else if inword=NO then begin inword:=YES; nw:=nw+1; end; end; writeln ('nc=',nc,'nw=',nw); end. В Турбо-Паскале 7.0 появился новый тип данных - строки, заканчивающиеся нулевым символом (#0), или, как их ещё называют, ASCIIZ-строки. В таких строках можно размещать до 65535 любых символов, кроме нулевого. Реализация механизма ASCIIZ-строк состоит из двух компонентов: во-первых введен новый предопределенный тип Pchar, а также некоторые синтаксические допущения, связанные с этим типом, и, во-вторых, в систему стандартных модулей добавлен модуль String, в котором содержится пакет разнообразных функций для работы с этими строками. Подробно работа с такими строками в этом пособии не рассматривается.
Дата добавления: 2014-11-18; Просмотров: 914; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |