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