3.12. Символьный тип данных
Символьный тип данных используется для хранения и обработки последовательностей символов из компьютерного алфавита – строк символов. Один символ занимает один байт памяти. Его внутреннее представление соответствует используемой таблице кодировки. В системах программирования в среде ОС MS Windows это код ASCII.
Символьная константа – строка, заключенная в апострофы или двойные кавычки. Например: `constant` или ``constant`` . Если внутри строки используется символ апострофа или кавычек, то ограничитель должен быть другим символом. Например: ``It`s constant``.
Символьные переменные объявляются оператором character:
Character [([len=]длина)] список переменных
Пример:
character (len=20) str1, str2 или то же самое:
character (20) str1, str2
character s
В последнем случае s – односимвольная величина.
Длина символьного объекта (константы или переменной) находится в пределах от 0 до 32767. Для указания длины можно использовать именованную константу. Например:
integer, parameter:: n=10
character (len=n) word
character (len=2*n) longword
Строковую переменную можно инициализировать при объявлении:
character (len=10):: st=’price’
В результате значение переменной st станет следующим: ‘price^^^^^`. В конце добавятся 5 хвостовых пробелов. Если же переменную st описать следующим образом:
character (len=3):: st=’price’ ,
то в переменную войдут лишь первые три символа: `pri`.
Символьная именованная константа объявляется с атрибутом PARAMETR. Например: character (10), parameter:: day=`Sunday`. Константа получит 4 хвостовых пробела. Если же константу описать так: character (*), parameter:: day=`Sunday`, то ее длина будет равна 6, т.е. длине константы.
Выделение подстроки. Символы в строке нумеруются начиная с единицы. Пусть объявлена переменная:
character (8):: St=’COMPUTER’
Внутренняя нумерация символов в ней будет следующей:
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
C |
O |
M |
P |
U |
T |
E |
R |
Подстрока – это часть последовательно расположенных символов строки. Формат идентификации подстроки следующий:
Имя_строки([first]:[last]) ,
где first – номер первого символа подстроки, last – номер последнего символа подстроки. По умолчанию first=1, last = длине строки. Например: St(1:5) – первые 5 символов строки (‘COMPU’). То же самое обозначает St(:5). St(4:8) равносильно обозначению St(4:). Один символ рассматривается как подстрока с совпадающими значениями first и last. Например: St(1:1) – первый символ, St(5:5) – пятый символ и т.д.
Массивы строк – это последовательность пронумерованных строк. Приведем примеры описания массива строк.
character(100), dimension(50)::spisok - массив из 50 строк длиной 100 символов. Тот же самый объект можно описать так:
character(100) spisok(50).
Далее в программе могут использоваться следующие обозначения:
spisok(1) – первая строка,
spisok(20) – 20-я строка,
spisok(5)(1:1) – первый символ пятой строки,
spisok(100)(:20) – первые 20 символов 100-й строки.
Функции определения длины строки. Различаются понятия: длина строки по описанию и длина строки по присвоенному значению. Вторая величина не учитывает хвостовых пробелов.
LEN(string) – функция определения длины строки по описанию;
LEN_TRIM(string) – функция определения длины строки без хвостовых пробелов.
Примеры использования функций:
character (10):: st=’COMPUTER’
print *, len(st) ! результат: 10
print *, len_trim(st) ! результат: 8
Пример 1: подсчитать число букв ‘a’ в данной строке.
character (20) str
print *, ‘введите строку:’
read *, str
k=0
do i=1, len_trim(str)
if(str(i:i)= = ‘a’) k=k+1
enddo
print *,’k=’, k
end
Операция конкатенации – объединение строк. Знак конкатенации – // (два слэша):
строка // строка
В результате операции получается строка с суммарной длиной операндов. Символьный оператор присваивания имеет вид:
символьная переменная = символьное выражение
Например:
character(20) st1
character(9):: st2=’Microsoft’, st3=’Office’
st1=st2//’_’//st3 !результат: Microsoft_Office
Пример 2. Из строки S выбрать все цифры и построить из них строку S1, сохраняя последовательность.
character (10) S, S1
integer k,i
read *,S ! вводим: ab1c23d4
k=1
do i=1,len_trim(S)
if (S(i:i)>=’0’ .and. S(i:i)<=’9’) then
S1(k:k)=S(i:i)
k=k+1
endif
enddo
print *, S1
end
Встроенные функции обработки символьных данных
Помимо функций LEN и LEN_TRIM, которые описывались выше, в Фортране имеется еще ряд функций работы с символьными величинами. Некоторые из них описаны в таблице. Замечание: С обозначает символьную величину, I – целую величину, STR – строку.