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

时间:2014-02-28 14:20:10

标签: fortran character

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

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

示例代码

program char
  implicit none

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

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

end program char

一种正确的方法是使用

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

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

program char
  implicit none

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

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

end program char

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

3 个答案:

答案 0 :(得分:5)

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

character(len=:), allocatable :: name

然后像这样初始化

name = 'John Doe'

以相同的方式重置

name = 'John Doe Jr'

答案 1 :(得分:2)

对于参数和伪参数,您可以使用character(len=*)

program char
  implicit none

  character(100) :: a = 'John Doe'
  character(len=*),parameter :: b = 'John Doe'

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

  write(*,*) trim(b)
  write(*,*) len_trim(b), len(b)

end program char

这导致:

./a.out 
 John Doe
           8         100
 John Doe
           8           8

答案 2 :(得分:1)

不使用allocatable

character(len=LEN_TRIM('John Doe') :: a = 'John Doe'

如果您担心重复,可以使用参数。

当然,可分配的字符变量有其用途,很可能适合您,但如果您真的希望变量通过各种赋值保留其长度,则必须小心:

a(:) = 'J. Doe'