字符串数组
字符串切片
Fortran中的字符串也支持切片操作,但是相对于数组切片要弱一些,例如,取字符串的第i个字符需要使用str(i:i),不能反向切片,不能间隔切片等
program string
  implicit none
  character(11)::str
  str="hello world"
  write(*,*)str(:5)
  !write(*,*)str(5),str(1:11:2) ,str(11:1:-1) !以上均不符合语法规范
end program string
$ fpm run
 hello
可分配字符串
在Fortran2003引入了可分配的字符串,使用起来更加灵活,可以显式的分配内存,也可以自动分配内存。
使用可分配字符串可以有效的避免字符串拼接之后尾部空格的问题
program allocatable_string
  implicit none
  character(:), allocatable :: first_name
  character(:), allocatable :: last_name
  character(:), allocatable :: full_name
  ! 显式分配内存
  allocate(character(4) :: first_name)
  first_name = 'John'
  ! 自动分配内存
  last_name = 'Smith'
  full_name = first_name//' '//last_name
  write(*,*)full_name
end program allocatable_string
$ fpm run
 John Smith
字符串数组
在Fortran中,字符串数组中的数组长度必须相同,使用数组构造器时也必须相同
program string_array
  implicit none
  character(len=10), dimension(2) :: keys
  character(len=:) , allocatable  :: vals(:)    !可分配的字符串数组,定义的时候必须都是可分配的
  !character(len=4) , allocatable  :: vals(:)    !错误
  keys = [character(len=10) :: "apple", "tree"] !这样可以给定构造器中字符串的长度
  write(*,*)keys(1)(1:3)                        !字符串数支持这类链式语法
  allocate(character(len=4)::vals(4))           !显式分配内存
end program string_array
$ fpm run
 app