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