Язык Фортрана может обрабатывать символы как отдельные символы или смежные строки.
Строка символов может иметь длину только один символ или даже нулевую длину. В Фортране символьные константы задаются между парой двойных или одинарных кавычек.
Внутренний символ типа данных хранит символы и строки. Длина строки может быть указана спецификатором len . Если длина не указана, она равна 1. Вы можете ссылаться на отдельные символы в строке, ссылаясь на позицию; самый левый символ находится в позиции 1.
Строковая декларация
Объявление строки совпадает с другими переменными —
type-specifier :: variable_name
Например,
Character(len = 20) :: firstname, surname
Вы можете назначить значение, как,
character (len = 40) :: name name = “Zara Ali”
В следующем примере демонстрируется объявление и использование символьного типа данных —
program hello implicit none character(len = 15) :: surname, firstname character(len = 6) :: title character(len = 25)::greetings title = 'Mr.' firstname = 'Rowan' surname = 'Atkinson' greetings = 'A big hello from Mr. Beans' print *, 'Here is', title, firstname, surname print *, greetings end program hello
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
Here is Mr. Rowan Atkinson A big hello from Mr. Bean
Конкатенация строк
Оператор конкатенации //, объединяет строки.
Следующий пример демонстрирует это —
program hello implicit none character(len = 15) :: surname, firstname character(len = 6) :: title character(len = 40):: name character(len = 25)::greetings title = 'Mr.' firstname = 'Rowan' surname = 'Atkinson' name = title//firstname//surname greetings = 'A big hello from Mr. Beans' print *, 'Here is', name print *, greetings end program hello
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
Here is Mr. Rowan Atkinson A big hello from Mr. Bean
Извлечение подстрок
В Fortran вы можете извлечь подстроку из строки, проиндексировав строку, указав начальный и конечный индексы подстроки в паре скобок. Это называется спецификатором экстента.
В следующем примере показано, как извлечь подстроку «world» из строки «hello world» —
program subString character(len = 11)::hello hello = "Hello World" print*, hello(7:11) end program subString
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
World
пример
В следующем примере функция date_and_time используется для указания строки даты и времени. Мы используем спецификаторы экстентов для извлечения года, даты, месяца, часа, минут и второй информации отдельно.
program datetime implicit none character(len = 8) :: dateinfo ! ccyymmdd character(len = 4) :: year, month*2, day*2 character(len = 10) :: timeinfo ! hhmmss.sss character(len = 2) :: hour, minute, second*6 call date_and_time(dateinfo, timeinfo) ! let’s break dateinfo into year, month and day. ! dateinfo has a form of ccyymmdd, where cc = century, yy = year ! mm = month and dd = day year = dateinfo(1:4) month = dateinfo(5:6) day = dateinfo(7:8) print*, 'Date String:', dateinfo print*, 'Year:', year print *,'Month:', month print *,'Day:', day ! let’s break timeinfo into hour, minute and second. ! timeinfo has a form of hhmmss.sss, where h = hour, m = minute ! and s = second hour = timeinfo(1:2) minute = timeinfo(3:4) second = timeinfo(5:10) print*, 'Time String:', timeinfo print*, 'Hour:', hour print*, 'Minute:', minute print*, 'Second:', second end program datetime
Когда вы компилируете и запускаете вышеуказанную программу, она дает подробную информацию о дате и времени —
Date String: 20140803 Year: 2014 Month: 08 Day: 03 Time String: 075835.466 Hour: 07 Minute: 58 Second: 35.466
Обрезка струн
Функция trim принимает строку и возвращает входную строку после удаления всех завершающих пробелов.
пример
program trimString implicit none character (len = *), parameter :: fname="Susanne", sname="Rizwan" character (len = 20) :: fullname fullname = fname//" "//sname !concatenating the strings print*,fullname,", the beautiful dancer from the east!" print*,trim(fullname),", the beautiful dancer from the east!" end program trimString
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
Susanne Rizwan , the beautiful dancer from the east! Susanne Rizwan, the beautiful dancer from the east!
Левая и правая настройка строк
Функция Adjustl берет строку и возвращает ее, удаляя начальные пробелы и добавляя их в качестве конечных пробелов.
Функция регулятор берет строку и возвращает ее, удаляя конечные пробелы и добавляя их в качестве ведущих пробелов.
пример
program hello implicit none character(len = 15) :: surname, firstname character(len = 6) :: title character(len = 40):: name character(len = 25):: greetings title = 'Mr. ' firstname = 'Rowan' surname = 'Atkinson' greetings = 'A big hello from Mr. Beans' name = adjustl(title)//adjustl(firstname)//adjustl(surname) print *, 'Here is', name print *, greetings name = adjustr(title)//adjustr(firstname)//adjustr(surname) print *, 'Here is', name print *, greetings name = trim(title)//trim(firstname)//trim(surname) print *, 'Here is', name print *, greetings end program hello
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
Here is Mr. Rowan Atkinson A big hello from Mr. Bean Here is Mr. Rowan Atkinson A big hello from Mr. Bean Here is Mr.RowanAtkinson A big hello from Mr. Bean
Поиск подстроки в строке
Функция index берет две строки и проверяет, является ли вторая строка подстрокой первой строки. Если второй аргумент является подстрокой первого аргумента, он возвращает целое число, которое является начальным индексом второй строки в первой строке, иначе он возвращает ноль.
пример
program hello implicit none character(len=30) :: myString character(len=10) :: testString myString = 'This is a test' testString = 'test' if(index(myString, testString) == 0)then print *, 'test is not found' else print *, 'test is found at index: ', index(myString, testString) end if end program hello
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —