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