Fortran - Personagens
A linguagem Fortran pode tratar os caracteres como caracteres únicos ou strings contíguas.
Os caracteres podem ser qualquer símbolo obtido do conjunto básico de caracteres, ou seja, das letras, dígitos decimais, sublinhado e 21 caracteres especiais.
Uma constante de caractere é uma cadeia de caracteres de valor fixo.
O tipo de dados intrínseco characterarmazena caracteres e strings. O comprimento da string pode ser especificado porlenespecificador. 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 Personagem
Declarar dados de tipo de caractere é igual a outras variáveis -
type-specifier :: variable_name
Por exemplo,
character :: reply, sex
você pode atribuir um valor como,
reply = ‘N’
sex = ‘F’
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. Bean'
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 is Mr. Rowan Atkinson
A big hello from Mr. Bean
Concatenação de Personagens
O operador de concatenação // concatena caracteres.
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. Bean'
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
Algumas funções de personagem
A tabela a seguir mostra algumas funções de caracteres comumente usadas junto com a descrição -
Sr. Não | Descrição da função |
---|---|
1 | len(string) Ele retorna o comprimento de uma string de caracteres |
2 | index(string,sustring) Ele encontra a localização de uma substring em outra string e retorna 0 se não for encontrada. |
3 | achar(int) Ele converte um número inteiro em um caractere |
4 | iachar(c) Ele converte um caractere em um inteiro |
5 | trim(string) Ele retorna a string com os espaços em branco à direita removidos. |
6 | scan(string, chars) Ele pesquisa a "string" da esquerda para a direita (a menos que back = .true.) Para a primeira ocorrência de qualquer caractere contido em "chars". Ele retorna um inteiro fornecendo a posição daquele caractere, ou zero se nenhum dos caracteres em "chars" foi encontrado. |
7 | verify(string, chars) Ele verifica a "string" da esquerda para a direita (a menos que back = .true.) Para a primeira ocorrência de qualquer caractere não contido em "chars". Ele retorna um inteiro fornecendo a posição daquele caractere ou zero se apenas os caracteres em "chars" forem encontrados |
8 | adjustl(string) Ele justifica à esquerda os caracteres contidos na "string" |
9 | adjustr(string) Ele justifica à direita os caracteres contidos na "string" |
10 | len_trim(string) Ele retorna um inteiro igual ao comprimento da "string" (len (string)) menos o número de espaços em branco à direita |
11 | repeat(string,ncopy) Ele retorna uma string com comprimento igual a "ncopy" vezes o comprimento de "string" e contendo cópias concatenadas de "ncopy" de "string" |
Exemplo 1
Este exemplo mostra o uso do index função -
program testingChars
implicit none
character (80) :: text
integer :: i
text = 'The intrinsic data type character stores characters and strings.'
i=index(text,'character')
if (i /= 0) then
print *, ' The word character found at position ',i
print *, ' in text: ', text
end if
end program testingChars
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
The word character found at position 25
in text : The intrinsic data type character stores characters and strings.
Exemplo 2
Este exemplo demonstra o uso do trim função -
program hello
implicit none
character(len = 15) :: surname, firstname
character(len = 6) :: title
character(len = 25)::greetings
title = 'Mr.'
firstname = 'Rowan'
surname = 'Atkinson'
print *, 'Here is', title, firstname, surname
print *, 'Here is', trim(title),' ',trim(firstname),' ', trim(surname)
end program hello
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
Here isMr. Rowan Atkinson
Here isMr. Rowan Atkinson
Exemplo 3
Este exemplo demonstra o uso de achar função -
program testingChars
implicit none
character:: ch
integer:: i
do i = 65, 90
ch = achar(i)
print*, i, ' ', ch
end do
end program testingChars
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
65 A
66 B
67 C
68 D
69 E
70 F
71 G
72 H
73 I
74 J
75 K
76 L
77 M
78 N
79 O
80 P
81 Q
82 R
83 S
84 T
85 U
86 V
87 W
88 X
89 Y
90 Z
Verificando a ordem lexical dos personagens
As funções a seguir determinam a sequência lexical de caracteres -
Sr. Não | Descrição da função |
---|---|
1 | lle(char, char) Compara se o primeiro caractere é lexicamente menor ou igual ao segundo |
2 | lge(char, char) Compara se o primeiro caractere é lexicamente maior ou igual ao segundo |
3 | lgt(char, char) Compara se o primeiro caractere é lexicamente maior que o segundo |
4 | llt(char, char) Compara se o primeiro caractere é lexicamente menor que o segundo |
Example 4
A função a seguir demonstra o uso -
program testingChars
implicit none
character:: a, b, c
a = 'A'
b = 'a'
c = 'B'
if(lgt(a,b)) then
print *, 'A is lexically greater than a'
else
print *, 'a is lexically greater than A'
end if
if(lgt(a,c)) then
print *, 'A is lexically greater than B'
else
print *, 'B is lexically greater than A'
end if
if(llt(a,b)) then
print *, 'A is lexically less than a'
end if
if(llt(a,c)) then
print *, 'A is lexically less than B'
end if
end program testingChars
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
a is lexically greater than A
B is lexically greater than A
A is lexically less than a
A is lexically less than B