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