Fortran - Strings
A linguagem Fortran pode tratar os caracteres como caracteres únicos ou strings contíguas.
Uma string de caracteres pode ter apenas um caractere de comprimento ou pode até ter comprimento zero. No Fortran, as constantes de caracteres são fornecidas entre um par de aspas duplas ou simples.
O tipo de dados intrínseco characterarmazena caracteres e strings. O comprimento da string pode ser especificado porlen specifier. Se nenhum comprimento for especificado, é 1. Você pode referir-se a caracteres individuais dentro de uma string referindo-se por posição; o caractere mais à esquerda está na posição 1.
Declaração de String
Declarar uma string é igual a outras variáveis -
type-specifier :: variable_name
Por exemplo,
Character(len = 20) :: firstname, surname
você pode atribuir um valor como,
character (len = 40) :: name
name = “Zara Ali”
O exemplo a seguir demonstra a declaração e o uso do tipo de dados de caractere -
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
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
Here isMr. Rowan Atkinson
A big hello from Mr. Bean
String Concatenation
O operador de concatenação // concatena strings.
O exemplo a seguir demonstra isso -
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
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
Here is Mr. Rowan Atkinson
A big hello from Mr. Bean
Extraindo substrings
No Fortran, você pode extrair uma substring de uma string indexando a string, fornecendo o índice inicial e final da substring em um par de colchetes. Isso é chamado de especificador de extensão.
O exemplo a seguir mostra como extrair a substring 'world' da string 'hello world' -
program subString
character(len = 11)::hello
hello = "Hello World"
print*, hello(7:11)
end program subString
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
World
Exemplo
O exemplo a seguir usa o date_and_timefunção para fornecer a string de data e hora. Usamos especificadores de extensão para extrair as informações de ano, data, mês, hora, minutos e segundos separadamente.
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
Quando você compila e executa o programa acima, ele fornece informações detalhadas de data e hora -
Date String: 20140803
Year: 2014
Month: 08
Day: 03
Time String: 075835.466
Hour: 07
Minute: 58
Second: 35.466
Corte de cordas
o trim A função recebe uma string e retorna a string de entrada após remover todos os espaços em branco à direita.
Exemplo
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
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
Susanne Rizwan , the beautiful dancer from the east!
Susanne Rizwan, the beautiful dancer from the east!
Ajuste Esquerdo e Direito de Strings
A função adjustl pega uma string e a retorna removendo os espaços em branco à esquerda e acrescentando-os como espaços em branco à direita.
A função adjustr pega uma string e a retorna removendo os espaços em branco à direita e acrescentando-os como espaços em branco à esquerda.
Exemplo
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
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
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
Procurando por uma substring em uma string
A função de índice pega duas strings e verifica se a segunda string é uma substring da primeira string. Se o segundo argumento for uma substring do primeiro argumento, ele retornará um inteiro que é o índice inicial da segunda string na primeira string, caso contrário, ele retornará zero.
Exemplo
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
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
test is found at index: 11