Fortran:字符

fortran语言可以将字符视为单个字符或是连续的字符串。
字符可以时基本字符集的任意字符。包括letters,decimal digits,underscore和21个特殊字符。
字符常量是一个固定值的字符串。
使用character可以声明字符或是字符串变量。其长度在声明的同时可以用len来指定。例如character(len=10) :: c
如果没有用len来指定,默认长度为1.可以通过下标来引用字符串中的单个字符或是字符串片段。最左边字符的位置为1.

1. 字符声明
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. Bean'

  print *, 'Here is ', title, firstname, surname
  print *, greetings

End program hello
使用ivf,执行结果如下所示:
Here is Mr. Rowan Atkinson       
A big hello from Mr. Bean

2. 字符串的链接
使用运算符"//"将字符串进行链接
示例代码如下:
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
执行上面代码,结果如下:
Here is Mr.Rowan Atkinson       
A big hello from Mr.Bean

3. 一些字符函数
以下这些函数都是fortran的内部函数。
len(string) 返回字符串声明长度
index(string,substring) 返回substring第一个字符在string中的位置,如果没有,则返回0
achar(int) 将整数转化为对应的字符
iachar(c) 将字符转化为对应的整数
trim(string) 返回截掉末尾空格的字符串
scan(string,chars) 与 verify(string,chars)的应用见下面的程序
adjustl(string) 将字符串向左对齐
adjustr(string) 将字符串向右对齐
len_trim(string) 返回出去末尾空格字符串的长度
repeat(string,ncopy) 返回重复ncopy次的string。
示例代码如下:
Program kindCheck
  implicit none
  integer :: i
  character :: ch
  character(len=5) :: c = "luk"

  write(*,'(1x,a,g0)') "len(c) = ", len(c)
  write(*,'(1x,a,g0)') "len_trim(c) = ", len_trim(c)
  write(*,'(1x,a,g0)') "index(c,'k') = ", index(c,'k')
  write(*,'(1x,a,g0)') "index(c,'9') = ", index(c,'9')

  do i = 65, 90
    ch = achar(i)
    write(*,'(1x,g0,3x,g0)') i, ch 
  end do 

  write(*,'(1x,a,g0)') "adjustl(c) = ", adjustl(c)
  write(*,'(1x,a,g0)') "adjustr(c) = ", adjustr(c)

  write(*,'(1x,a,g0)') "repeat(c,3) = ", repeat(c,3) 
  write(*,'(1x,a,g0)') "repeat(trim(c),3) = ", repeat(trim(c),3)

  write(*,'(1x,a,g0)') "scan('abcdcf','zx') = ", scan("abcdef","zx")  !.. 没有任何一个属于原string,返回0
  write(*,'(1x,a,g0)') "scan('abcdcf','cf') = ", scan("abcdef","cf")  !.. 如果第一次找到即返回,找不到再找"cf"中的下一个元素
  write(*,'(1x,a,g0)') "scan('abbdce','ce', back = .true.) = ", scan("abbdce","ce") 

  write(*,'(1x,a,g0)') "verify('gecdef','ge') = ", verify("gecdef","ge") 
  write(*,'(1x,a,g0)') "verify('cbcdcf','ge') = ", verify("cbcdef","cbdef")  !.. 如果是真子集,返回0

End program kindCheck
执行后结果如下:
 len(c) = 5
 len_trim(c) = 3
 index(c,'k') = 3
 index(c,'9') = 0
 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
 adjustl(c) = luk
 adjustr(c) =   luk
 repeat(c,3) = luk  luk  luk
 repeat(trim(c),3) = luklukluk
 scan('abcdcf','zx') = 0
 scan('abcdcf','cf') = 3
 scan('abbdce','ce', back = .true.) = 5
 verify('gecdef','ge') = 3
 verify('cbcdcf','ge') = 0

3. Checking Lexical Order of Characters
这一部分内容主要是使用lle, lge, lgt, llt。这几个函数的作用对象都是单个字符。不过本文不打算讲解这几个函数,因为对应的<=, >=, >, <即可胜任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值