Fortran - Postacie

Język Fortran może traktować znaki jako pojedyncze znaki lub ciągłe ciągi.

Znakami mogą być dowolne symbole wzięte z podstawowego zestawu znaków, tj. Z liter, cyfr dziesiętnych, podkreślenia i 21 znaków specjalnych.

Stała znakowa to ciąg znaków o stałej wartości.

Wewnętrzny typ danych characterprzechowuje znaki i ciągi. Długość ciągu można określić za pomocąlenspecyficzny. Jeśli nie określono długości, jest to 1. Możesz odnosić się do poszczególnych znaków w ciągu, odwołując się do pozycji; skrajny lewy znak znajduje się na pozycji 1.

Deklaracja postaci

Deklarowanie danych typu znakowego jest takie samo jak w przypadku innych zmiennych -

type-specifier :: variable_name

Na przykład,

character :: reply, sex

możesz przypisać wartość taką jak,

reply = ‘N’ 
sex = ‘F’

Poniższy przykład demonstruje deklarację i użycie typu danych znakowych -

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

Kiedy kompilujesz i wykonujesz powyższy program, daje to następujący wynik -

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

Łączenie znaków

Operator konkatenacji // łączy znaki.

Poniższy przykład demonstruje to -

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

Kiedy kompilujesz i wykonujesz powyższy program, daje to następujący wynik -

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

Niektóre funkcje postaci

W poniższej tabeli przedstawiono niektóre często używane funkcje znakowe wraz z opisem -

Sr.No Opis funkcji
1

len(string)

Zwraca długość ciągu znaków

2

index(string,sustring)

Znajduje lokalizację podciągu w innym ciągu, zwraca 0, jeśli nie zostanie znaleziony.

3

achar(int)

Konwertuje liczbę całkowitą na znak

4

iachar(c)

Konwertuje znak na liczbę całkowitą

5

trim(string)

Zwraca ciąg z usuniętymi końcowymi spacjami.

6

scan(string, chars)

Przeszukuje „string” od lewej do prawej (chyba że back = .true.) Pod kątem pierwszego wystąpienia dowolnego znaku zawartego w „chars”. Zwraca liczbę całkowitą określającą pozycję tego znaku lub zero, jeśli żaden ze znaków w „znakach” nie został znaleziony.

7

verify(string, chars)

Przeszukuje „string” od lewej do prawej (chyba że back = .true.) W poszukiwaniu pierwszego wystąpienia dowolnego znaku nie zawartego w „chars”. Zwraca liczbę całkowitą określającą pozycję tego znaku lub zero, jeśli znaleziono tylko znaki w „znakach”

8

adjustl(string)

W lewo wyrównuje znaki zawarte w „ciągu”

9

adjustr(string)

Wyrównuje poprawnie znaki zawarte w „ciągu znaków”

10

len_trim(string)

Zwraca liczbę całkowitą równą długości „string” (len (string)) minus liczba końcowych spacji

11

repeat(string,ncopy)

Zwraca ciąg o długości równej „ncopy” pomnożonej przez długość „string” i zawierający „ncopy” połączone kopie „string”

Przykład 1

Ten przykład pokazuje użycie index funkcja -

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

Kiedy kompilujesz i wykonujesz powyższy program, daje to następujący wynik -

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

Przykład 2

Ten przykład demonstruje użycie trim funkcja -

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

Kiedy kompilujesz i wykonujesz powyższy program, daje to następujący wynik -

Here isMr.   Rowan          Atkinson       
 Here isMr. Rowan Atkinson

Przykład 3

Ten przykład demonstruje użycie achar funkcja -

program testingChars
implicit none

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

Kiedy kompilujesz i wykonujesz powyższy program, daje to następujący wynik -

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

Sprawdzanie leksykalnego porządku znaków

Następujące funkcje określają leksykalny ciąg znaków -

Sr.No Opis funkcji
1

lle(char, char)

Porównuje, czy pierwszy znak jest leksykalnie mniejszy lub równy drugiemu

2

lge(char, char)

Porównuje, czy pierwszy znak jest leksykalnie większy lub równy drugiemu

3

lgt(char, char)

Porównuje, czy pierwszy znak jest leksykalnie większy niż drugi

4

llt(char, char)

Porównuje, czy pierwszy znak jest leksykalnie mniejszy niż drugi

Example 4

Poniższa funkcja demonstruje użycie -

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

Kiedy kompilujesz i wykonujesz powyższy program, daje to następujący wynik -

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