Fortran - Personajes

El lenguaje Fortran puede tratar los caracteres como un solo carácter o como cadenas contiguas.

Los caracteres pueden ser cualquier símbolo tomado del conjunto de caracteres básico, es decir, de las letras, los dígitos decimales, el subrayado y 21 caracteres especiales.

Una constante de carácter es una cadena de caracteres de valor fijo.

El tipo de datos intrínseco characteralmacena caracteres y cadenas. La longitud de la cadena se puede especificar mediantelenespecificador. Si no se especifica una longitud, es 1. Puede hacer referencia a caracteres individuales dentro de una cadena refiriéndose por posición; el carácter más a la izquierda está en la posición 1.

Declaración de carácter

Declarar datos de un tipo de carácter es igual que otras variables -

type-specifier :: variable_name

Por ejemplo,

character :: reply, sex

puede asignar un valor como,

reply = ‘N’ 
sex = ‘F’

El siguiente ejemplo demuestra la declaración y el uso del tipo de datos de caracteres:

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

Cuando compila y ejecuta el programa anterior, produce el siguiente resultado:

Here is Mr. Rowan Atkinson       
A big hello from Mr. Bean

Concatenación de personajes

El operador de concatenación // concatena caracteres.

El siguiente ejemplo demuestra esto:

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

Cuando compila y ejecuta el programa anterior, produce el siguiente resultado:

Here is Mr.Rowan Atkinson       
A big hello from Mr.Bean

Algunas funciones de los personajes

La siguiente tabla muestra algunas funciones de caracteres de uso común junto con la descripción:

No Señor Función descriptiva
1

len(string)

Devuelve la longitud de una cadena de caracteres.

2

index(string,sustring)

Encuentra la ubicación de una subcadena en otra cadena, devuelve 0 si no se encuentra.

3

achar(int)

Convierte un entero en un carácter

4

iachar(c)

Convierte un carácter en un entero

5

trim(string)

Devuelve la cadena con los espacios en blanco finales eliminados.

6

scan(string, chars)

Busca en la "cadena" de izquierda a derecha (a menos que back = .true.) La primera aparición de cualquier carácter contenido en "chars". Devuelve un número entero que indica la posición de ese carácter, o cero si no se ha encontrado ninguno de los caracteres en "chars".

7

verify(string, chars)

Escanea la "cadena" de izquierda a derecha (a menos que back = .true.) Para la primera aparición de cualquier carácter no contenido en "chars". Devuelve un número entero que indica la posición de ese carácter, o cero si solo se han encontrado los caracteres en "chars"

8

adjustl(string)

Justifica a la izquierda los caracteres contenidos en la "cadena"

9

adjustr(string)

Justifica a la derecha los caracteres contenidos en la "cadena".

10

len_trim(string)

Devuelve un número entero igual a la longitud de "cadena" (len (cadena)) menos el número de espacios en blanco finales

11

repeat(string,ncopy)

Devuelve una cadena con una longitud igual a "ncopy" multiplicada por la longitud de "cadena" y que contiene "ncopy" copias concatenadas de "cadena"

Ejemplo 1

Este ejemplo muestra el uso de la index función -

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

Cuando compila y ejecuta el programa anterior, produce el siguiente resultado:

The word character found at position 25
in text : The intrinsic data type character stores characters and strings.

Ejemplo 2

Este ejemplo demuestra el uso de la trim función -

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

Cuando compila y ejecuta el programa anterior, produce el siguiente resultado:

Here isMr.   Rowan          Atkinson       
 Here isMr. Rowan Atkinson

Ejemplo 3

Este ejemplo demuestra el uso de achar función -

program testingChars
implicit none

   character:: ch
   integer:: i
   
   do i = 65, 90
      ch = achar(i)
      print*, i, ' ', ch
   end do
   
end program testingChars

Cuando compila y ejecuta el programa anterior, produce el siguiente 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

Comprobación del orden léxico de los caracteres

Las siguientes funciones determinan la secuencia léxica de caracteres:

No Señor Función descriptiva
1

lle(char, char)

Compara si el primer carácter es léxicamente menor o igual que el segundo

2

lge(char, char)

Compara si el primer carácter es léxicamente mayor o igual que el segundo

3

lgt(char, char)

Compara si el primer carácter es léxicamente mayor que el segundo

4

llt(char, char)

Compara si el primer carácter es léxicamente menor que el segundo

Example 4

La siguiente función demuestra el 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

Cuando compila y ejecuta el programa anterior, produce el siguiente 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