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