位置:首頁 > 高級語言 > Fortran教學 > Fortran字符

Fortran字符

Fortran語言可以把字符作為單個字符或連續的字符串。

字符可以是從基本的字符集,即從字母,十進製數字,下劃線和21特殊字符所采取的任何符號。

字符常量是一個固定的值的字符串。

內部數據類型的字符存儲字符和字符串。字符串的長度可以通過len個符來指定。如果冇有指定長度,它是長度是1. 可以將字符串按位置指的是指在單個字符;最左邊的字符的位置是1。

字符聲明

聲明一個字符類型的數據是一樣的其他變量:

type-specifier :: variable_name

例如,

character :: reply, sex

可以指定一個值類似,

reply = N 
sex = F

下麵的例子演示了聲明和使用字符數據類型:

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. Beans'
   
   print *, 'Here is ', title, firstname, surname
   print *, greetings
   
end program hello

當編譯並執行上述程序,將產生以下結果:

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

字符串接

連接運算符//符,連接字符。

下麵的例子說明了這一點:

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. Beans'
   
   print *, 'Here is ', name
   print *, greetings
   
end program hello

當編譯並執行上述程序,將產生以下結果:

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

一些字符函數

下表顯示描述一些常用字符的函數:

函數 描述
len(string) 它返回字符串的長度
index(string,sustring) 在一個字符串找出子串的位置,如果冇有找到則返回0。
achar(int) 將整數轉換成一個字符
iachar(c) 它可將一個字符轉換為整數
trim(string) 它返回去掉尾隨空格的字符串。
scan(string, chars) 它會搜索“string”由左到右(除非back=.true)包含在“string”任何字符的第一次出現。它返回一個整數,該字符,或零的位置,如果冇有文字的“字符”已被找到。
verify(string, chars) 它掃描“string”由左到右(除非back=.true)不包含在“string”任何字符的第一次出現。它返回一個整數,該字符的位置,如果隻在“字符”的字符被找到,或者冇有找則返回零。
adjustl(string) 它留下左截於“string”包含的字符
adjustr(string) 它留下右截於“string”包含的字符
len_trim(string) 它返回一個整數等於“string”(len(string))減去尾隨空白的數量
repeat(string,ncopy) 它返回一個字符串長度等於“ncopy”次數“string”的長度,並含有“string”的“ncopy”串聯拷貝

實例 1

這個例子顯示使用index函數:

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

當編譯並執行上述程序,將產生以下結果:

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

示例 2

這個例子演示了如何使用trim函數:

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

當編譯並執行上述程序,將產生以下結果:

Here is Mr. Rowan Atkinson       
Here is Mr. Rowan Atkinson

示例 3

這個例子演示了如何使用achar函數

program testingChars
implicit none

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

當編譯並執行上述程序,將產生以下結果:

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

檢查詞法順序字符

下麵的函數確定的字符的詞法序列:

函數 描述
lle(char, char) 進行比較的第一個字符是否是詞彙上小於或等於所述第二字符
lge(char, char) 進行比較的第一個字符是否是詞彙上大於或等於所述第二字符
lgt(char, char) 進行比較的第一個字符是否是詞彙上比第二字符大
llt(char, char) 比較第一個字符是否是詞彙上比小於第二字符

示例 4

下麵的函數演示了如何使用:

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

當編譯並執行上述程序,將產生以下結果:

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