Fortran - Personnages
Le langage Fortran peut traiter les caractères comme des caractères uniques ou des chaînes contiguës.
Les caractères peuvent être n'importe quel symbole tiré du jeu de caractères de base, c'est-à-dire des lettres, des chiffres décimaux, du trait de soulignement et 21 caractères spéciaux.
Une constante de caractère est une chaîne de caractères à valeur fixe.
Le type de données intrinsèque characterstocke des caractères et des chaînes. La longueur de la chaîne peut être spécifiée parlenprescripteur. Si aucune longueur n'est spécifiée, c'est 1. Vous pouvez faire référence à des caractères individuels dans une chaîne faisant référence par position; le caractère le plus à gauche est en position 1.
Déclaration de caractère
La déclaration d'une donnée de type caractère est la même que les autres variables -
type-specifier :: variable_name
Par exemple,
character :: reply, sex
vous pouvez attribuer une valeur comme,
reply = ‘N’
sex = ‘F’
L'exemple suivant illustre la déclaration et l'utilisation du type de données caractère -
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
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
Here is Mr. Rowan Atkinson
A big hello from Mr. Bean
Concaténation de caractères
L'opérateur de concaténation //, concatène les caractères.
L'exemple suivant illustre ceci -
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
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
Here is Mr.Rowan Atkinson
A big hello from Mr.Bean
Quelques fonctions de caractère
Le tableau suivant montre quelques fonctions de caractères couramment utilisées avec la description -
Sr.Non | Description de la fonction |
---|---|
1 | len(string) Il renvoie la longueur d'une chaîne de caractères |
2 | index(string,sustring) Il trouve l'emplacement d'une sous-chaîne dans une autre chaîne, renvoie 0 s'il n'est pas trouvé. |
3 | achar(int) Il convertit un entier en caractère |
4 | iachar(c) Il convertit un caractère en un entier |
5 | trim(string) Il renvoie la chaîne avec les blancs de fin supprimés. |
6 | scan(string, chars) Il recherche la "chaîne" de gauche à droite (sauf si back = .true.) Pour la première occurrence de tout caractère contenu dans "chars". Il renvoie un entier donnant la position de ce caractère, ou zéro si aucun des caractères de "chars" n'a été trouvé. |
sept | verify(string, chars) Il scanne la "chaîne" de gauche à droite (à moins que back = .true.) Pour la première occurrence de tout caractère non contenu dans "chars". Il renvoie un entier donnant la position de ce caractère, ou zéro si seuls les caractères de "chars" ont été trouvés |
8 | adjustl(string) Il à gauche justifie les caractères contenus dans la "chaîne" |
9 | adjustr(string) Il justifie à droite les caractères contenus dans la "chaîne" |
dix | len_trim(string) Il renvoie un entier égal à la longueur de "string" (len (string)) moins le nombre de blancs de fin |
11 | repeat(string,ncopy) Il renvoie une chaîne de longueur égale à "ncopy" multipliée par la longueur de "string" et contenant "ncopy" des copies concaténées de "string" |
Exemple 1
Cet exemple montre l'utilisation du index fonction -
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
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
The word character found at position 25
in text : The intrinsic data type character stores characters and strings.
Exemple 2
Cet exemple illustre l'utilisation du trim fonction -
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
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
Here isMr. Rowan Atkinson
Here isMr. Rowan Atkinson
Exemple 3
Cet exemple montre l'utilisation de achar fonction -
program testingChars
implicit none
character:: ch
integer:: i
do i = 65, 90
ch = achar(i)
print*, i, ' ', ch
end do
end program testingChars
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
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
Vérification de l'ordre lexical des caractères
Les fonctions suivantes déterminent la séquence lexicale des caractères -
Sr.Non | Description de la fonction |
---|---|
1 | lle(char, char) Compare si le premier caractère est lexicalement inférieur ou égal au second |
2 | lge(char, char) Compare si le premier caractère est lexicalement supérieur ou égal au second |
3 | lgt(char, char) Compare si le premier caractère est lexicalement plus grand que le second |
4 | llt(char, char) Compare si le premier caractère est lexicalement inférieur au second |
Example 4
La fonction suivante montre l'utilisation -
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
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
a is lexically greater than A
B is lexically greater than A
A is lexically less than a
A is lexically less than B