Fortran:在初始化期间自动确定字符长度

Jos*_*ost 3 fortran character

在Fortran声明期间使用初始化程序时,是否可以自动扣除字符(字符串)的长度?我想要这样的东西(不按原样运作)

  character(*) :: a = 'John Doe'
  character(:) :: a = 'John Doe'
Run Code Online (Sandbox Code Playgroud)

示例代码

program char
  implicit none

  character(8) :: a = 'John Doe' !<-automatically?

  write(*,*) a
  write(*,*) len(a)

end program char
Run Code Online (Sandbox Code Playgroud)

一种正确的方法是使用

  character(8) :: a = 'John Doe'
Run Code Online (Sandbox Code Playgroud)

通过简单地计算字符,但这很容易出错.或者,我可以使角色超过必要的时间并使用trim()

program char
  implicit none

  character(100) :: a = 'John Doe'

  write(*,*) trim(a)
  write(*,*) len(trim(a))

end program char
Run Code Online (Sandbox Code Playgroud)

但是可以8自动确定吗?我知道这是一个学术问题,但我仍然想知道......

Hig*_*ark 5

除了使用@ AlexanderVogt的解决方案之外parameter,您还可以在Fortran 2003中使用自动分配,如下所示:

character(len=:), allocatable :: name
Run Code Online (Sandbox Code Playgroud)

然后像这样初始化

name = 'John Doe'
Run Code Online (Sandbox Code Playgroud)

并以相同的方式重置

name = 'John Doe Jr'
Run Code Online (Sandbox Code Playgroud)