返回 主页

Fortran内置函数-字符串处理部分

下面列出 Fortran 2008 标准中全部 与字符(CHARACTER)处理有关的 17 个内置函数(intrinsic functions)。 每个都给出 :

如无特别说明,所有参数 STRINGSTRING_ASTRING_BSUBSTRINGSETC 均为任意长度的默认字符型 character(len=*, kind=1);
可选参数 KIND 为整型标量,表示结果字符的 kind;
可选参数 BACK 为逻辑型标量,缺省为 . FALSE.

  1. LEN(STRING)
integer function LEN(STRING)
  character(len=*), intent(in) :: STRING
character(len=10) :: s = "abc"
print *, LEN(s)        ! 10
  1. LEN_TRIM(STRING)
integer function LEN_TRIM(STRING)
  character(len=*), intent(in) :: STRING
print *, LEN_TRIM("FORTRAN   ")   ! 7
  1. TRIM(STRING)
character(len=LEN(STRING)) function TRIM(STRING)
  character(len=*), intent(in) :: STRING
write(*,'(a)') '['//TRIM("Hello   ")//']'   ! [Hello]
  1. INDEX(STRING, SUBSTRING [, BACK])
integer function INDEX(STRING, SUBSTRING, BACK)
  character(len=*), intent(in) :: STRING, SUBSTRING
  logical, optional, intent(in) :: BACK
print *, INDEX("banana","an")          ! 2
print *, INDEX("banana","an",BACK=.true.) ! 4
  1. SCAN(STRING, SET [, BACK])
integer function SCAN(STRING, SET, BACK)
  character(len=*), intent(in) :: STRING, SET
  logical, optional, intent(in) :: BACK
print *, SCAN("FORTRAN","AEIOU")        ! 2 ('O')
print *, SCAN("FORTRAN","aeiou",BACK=.true.) ! 0(大小写区分)
  1. VERIFY(STRING, SET [, BACK])
integer function VERIFY(STRING, SET, BACK)
  character(len=*), intent(in) :: STRING, SET
  logical, optional, intent(in) :: BACK
print *, VERIFY("123-45","0123456789")   ! 4(字符 '-')
  1. REPEAT(STRING, NCOPIES)
character(len=LEN(STRING)*NCOPIES) function REPEAT(STRING, NCOPIES)
  character(len=*), intent(in) :: STRING
  integer, intent(in) :: NCOPIES
print *, REPEAT("HA",3)   ! HAHAHA
  1. ADJUSTL(STRING)
character(len=LEN(STRING)) function ADJUSTL(STRING)
  character(len=*), intent(in) :: STRING
print *, '"'//ADJUSTL("  left")//'"'   ! "left      "
  1. ADJUSTR(STRING)
character(len=LEN(STRING)) function ADJUSTR(STRING)
  character(len=*), intent(in) :: STRING
print *, '"'//ADJUSTR("right  ")//'"'   ! "     right"
  1. CHAR(I [, KIND])
character(len=1, kind=KIND) function CHAR(I, KIND)
  integer, intent(in) :: I
  integer, optional, intent(in) :: KIND
print *, CHAR(65)   ! 'A'
  1. ACHAR(I)
character(len=1) function ACHAR(I)
  integer, intent(in) :: I
  1. ICHAR©
integer function ICHAR(C)
  character(len=1), intent(in) :: C
  1. IACHAR©
integer function IACHAR(C)
  character(len=1), intent(in) :: C
print *, IACHAR('a')   ! 97

14-17. 词汇比较函数
LGE(STRING_A, STRING_B)
LGT(STRING_A, STRING_B)
LLE(STRING_A, STRING_B)
LLT(STRING_A, STRING_B)

原型统一

logical function L??(STRING_A, STRING_B)
  character(len=*), intent(in) :: STRING_A, STRING_B
print *, LGT("apple","Apple")   ! T

小结速查表

功能类别函数名
长度LEN, LEN_TRIM
去空格TRIM, ADJUSTL, ADJUSTR
查找INDEX, SCAN, VERIFY
重复REPEAT
字符 ←> 码值CHAR, ACHAR, ICHAR, IACHAR
词汇比较LGE, LGT, LLE, LLT

以上 17 个函数全部属于 Fortran 2008 标准 的 intrinsic inquiry/transformational functions,任何合规编译器(gfortran ≥ 4.8、ifort、nvfortran 等)均可直接使用。

返回 主页