Читайте также: |
|
В предыдущих разделах были введены встроенные численные типы REAL и INTEGER. Третий встроенный тип CHARACTER представлен в данном разделе. Этот тип используется для манипуляции с данными, представляющими слова и предложения.
В языке Fortran строки имеют длину, индивидуальные символы могут вызываться по позиции (самый левый символ занимает позицию № 1). Как и с численными типами, программист может специфицировать литеральные константы встроенного типа character как описано ниже.
Константы Character
Пример ниже взят из программы, которая вычисляет площадь окружности. Программа читает значение радиуса, выводит площадь окружности. Без приглашения для пользователя вид такой программы очень неудобен - так как не обозначено, что именно нужно вводить. Включение символьных констант (или литералов) в вывод делает программу для пользователя более понятной. Например:
WRITE (*,*) `Пожалуйста, напечатайте значение радиуса окружности'
READ (*,*) radius
area = pi*radius*radius
WRITE (*,*) `Площадь окружности с радиусом `, radius, &
` равна `, area
Символы, которые появляются между двумя апострофами, это символы константы и они появятся на экране:
Пожалуйста, напечатайте значение радиуса окружности'
12.0
Площадь окружности с радиусом 12.0 равна 452.38925
Символы двойной кавычки могут быть использованы для определения символьных литералов. Если строка символов содержит символы ограничителей (апострофы или двойные кавычки), то другое может быть использовано в качестве ограничителей. Тем не менее, если строка содержит оба символа ограничителя или программист хочет всегда определиять строку, используя тот же символ, что и ограничитель, то ограничитель может быть задан в строке как два близких ограничителя (апострофы или двойные кавычки, как подойдет). Эти, что показаны как одиночный символ.
"Эта строка содержит апостроф '."
' Эта строка содержит двойные кавычки ".'
" Эта строка содержит апостроф ' и двойные кавычки ""."
Это могло бы появиться в выводе как:
Эта строка содержит апостроф '.
Эта строка содержит двойные кавычки ".
Эта строка содержит апостроф ' и двойные кавычки ".
Символьные переменные
Переменные REAL и INTEGER. Следующий оператор объявляет две символьные перменные, каждая из которых содержит один символ:
CHARACTER:: yesorno, sex
Значение, присваиваемое символьной переменной в форме символьной константы, таким образом:
yesorno = 'N'
sex = 'F'
Символьные переменные, содержащие несколько символов, известны как строки. Например, чтобы запомнить персональное имя, можно сделать следующее определение и присваивание:
CHARACTER(LEN=12):: surname, firstname
CHARACTER(LEN=6):: initials, title
title = 'Prof.'
initials = 'fjs'
firstname = 'Fred'
surname = 'Bloggs'
Заметим, что все определены с указанием длины, чтобы присваивать литеральные константы. Переменные, которые имеют непривычные символы, заполнены пробелами до конца. Если переменная не достаточной длины, чтобы содержать символы, присваиваемые ей, то могут быть использованы самые левые, а избыток отсечен. Например:
title = 'Professor'
будет эквивалентно оператору:
title = 'Profes'
Общая форма объявленияя символьной переменной такова:
CHARACTER [(LEN=)] [,attributes]:: name
Манипуляции с символами
Конкатенация
Арифметические операции, такие как + и -, могут быть использованы и с символьными переменными. Только для символьных определена операция конкатенации со знаком //. Она может быть применена для объединения двух строк:
CHARACTER (len=24):: name
CHARACTER (len=6):: surname
surname = 'Bloggs'
name = 'Prof ' // ' Fred ' // surname
Как с символьными литералами, если выражение, использующее операцию //, превышает длину переменной, то лишние символы справа отсекаются, и если слишком мало символов специфицировано, то символьные позиции справа заполняются пробелами.
Подстроки
Подстрока это часть большой символьной строки. Символы в строке могут быть указаны с помощью позиции в строке, начиная от первого самого левого символа.
CHARACTER (LEN=7):: lang
lang = 'Fortran'
WRITE (6,*) lang(1:1), lang(2:2), lang(3:4), lang(5:7)
Приведет к следующему выводу на экран:
Fortran
Подстрока специфицирована с помощью начальной и конечной позиции (start-position: end-position). Если значение для начальной позиции start-position опущено, берется 1 и если значение конечной позиции end-position опущено, берется максимальная длина строки. Так, lang(:3) эквивалентно lang(1:3) и lang(5:) эквивалентно lang(5:7).
Значения start-position и end-position должны быть целыми или выражениями, имеющими целое значение. Значение start-position должно быть >= 1, значение end-position <= длина строки. Если start-position > максимальной длины или end-position, то в результате получится строка нулевой длины.
Встроенные функции
О функциях пойдет речь более глубоко позднее в курсе, как бы ни было это полезно ввести на этой ранней стадии. Встроенные функции представляют действия, которые определены в стандарте языка и функции, табулированные ниже, относятся к символьным строкам. Эти встроенные функции представляют несколько общих, требующих символьных манипуляций:
•LEN(string) возвращает длину символьной строки
•INDEX(string,sustring) находит место подстроки в другой строке, возвращает 0, если не находит
•CHAR(int) преобразует целое в символ
•ICHAR(c) преобразует символ в целое
•TRIM(string) возвращает строку с завершающими пробелами, перемещенными.
Преобразование символьных и целых основаны на том, что доступнные символы представляют собой последовательность, а целые значения представляют позицию в последовательности набора символов. Поскльку они являются некоторой позицией в последовательности набора символов и к тому же машинно-зависимы, то соответсвующие целые значения здесь не обсуждаются. Тем не менее возможно установить, чтобы независимо от фактическую последовательность, имело место следующее:
INTEGER:: i
CHARACTER:: ch
...
i=ICHAR(CHAR(i))
ch=CHAR(ICHAR(ch))
Ниже пример того, как могут быть использованы встроенные функции:
CHARACTER(len=12):: surname, firstname
INTEGER:: length, pos
...
length = LEN(surname)! длина=12
firstname = 'Walter'
pos = INDEX(firstname, 'al')! pos=2
firstname = 'Fred'
pos = INDEX(firstname, 'al')! pos=0
length = LEN(TRIM(firstname))! длина=4
Дата добавления: 2015-11-14; просмотров: 70 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Спецификации или объявления | | | Логические выражения |