Fortran - Personaggi

Il linguaggio Fortran può trattare i caratteri come caratteri singoli o stringhe contigue.

I caratteri possono essere qualsiasi simbolo preso dal set di caratteri di base, cioè dalle lettere, dai decimali, dal trattino basso e da 21 caratteri speciali.

Una costante di carattere è una stringa di caratteri a valore fisso.

Il tipo di dati intrinseco charactermemorizza caratteri e stringhe. La lunghezza della stringa può essere specificata dalenspecificatore. Se non viene specificata alcuna lunghezza, è 1. È possibile fare riferimento a singoli caratteri all'interno di una stringa facendo riferimento per posizione; il carattere più a sinistra è nella posizione 1.

Dichiarazione del personaggio

La dichiarazione di un tipo di carattere dati è la stessa di altre variabili -

type-specifier :: variable_name

Per esempio,

character :: reply, sex

puoi assegnare un valore come,

reply = ‘N’ 
sex = ‘F’

L'esempio seguente dimostra la dichiarazione e l'uso del tipo di dati carattere -

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 compili ed esegui il programma sopra, produce il seguente risultato:

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

Concatenazione di caratteri

L'operatore di concatenazione //, concatena i caratteri.

Il seguente esempio lo dimostra:

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 compili ed esegui il programma sopra, produce il seguente risultato:

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

Alcune funzioni dei caratteri

La tabella seguente mostra alcune funzioni dei caratteri di uso comune insieme alla descrizione:

Suor n Descrizione della funzione
1

len(string)

Restituisce la lunghezza di una stringa di caratteri

2

index(string,sustring)

Trova la posizione di una sottostringa in un'altra stringa, restituisce 0 se non viene trovata.

3

achar(int)

Converte un numero intero in un carattere

4

iachar(c)

Converte un carattere in un numero intero

5

trim(string)

Restituisce la stringa con gli spazi finali rimossi.

6

scan(string, chars)

Cerca la "stringa" da sinistra a destra (a meno che back = .true.) Per la prima occorrenza di qualsiasi carattere contenuto in "chars". Restituisce un numero intero che fornisce la posizione di quel carattere, o zero se nessuno dei caratteri in "chars" è stato trovato.

7

verify(string, chars)

Esamina la "stringa" da sinistra a destra (a meno che back = .true.) Alla ricerca della prima occorrenza di qualsiasi carattere non contenuto in "chars". Restituisce un numero intero che fornisce la posizione di quel carattere, o zero se sono stati trovati solo i caratteri in "chars"

8

adjustl(string)

Giustifica a sinistra i caratteri contenuti nella "stringa"

9

adjustr(string)

Giustifica a destra i caratteri contenuti nella "stringa"

10

len_trim(string)

Restituisce un numero intero uguale alla lunghezza di "stringa" (len (stringa)) meno il numero di spazi vuoti finali

11

repeat(string,ncopy)

Restituisce una stringa di lunghezza uguale a "ncopy" moltiplicata per la lunghezza di "stringa" e contenente "ncopy" copie concatenate di "stringa"

Esempio 1

Questo esempio mostra l'uso di index funzione -

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 compili ed esegui il programma sopra, produce il seguente risultato:

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

Esempio 2

Questo esempio dimostra l'uso di trim funzione -

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 compili ed esegui il programma sopra, produce il seguente risultato:

Here isMr.   Rowan          Atkinson       
 Here isMr. Rowan Atkinson

Esempio 3

Questo esempio dimostra l'uso di achar funzione -

program testingChars
implicit none

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

Quando compili ed esegui il programma sopra, produce il seguente risultato:

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

Controllo dell'ordine lessicale dei caratteri

Le seguenti funzioni determinano la sequenza lessicale dei caratteri:

Suor n Descrizione della funzione
1

lle(char, char)

Confronta se il primo carattere è lessicalmente minore o uguale al secondo

2

lge(char, char)

Confronta se il primo carattere è lessicalmente maggiore o uguale al secondo

3

lgt(char, char)

Confronta se il primo carattere è lessicalmente maggiore del secondo

4

llt(char, char)

Confronta se il primo carattere è lessicalmente inferiore al secondo

Example 4

La seguente funzione dimostra l'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 compili ed esegui il programma sopra, produce il seguente risultato:

a is lexically greater than A
B is lexically greater than A
A is lexically less than a
A is lexically less than B