Fortran 函数可变长度字符串 return
Fortran function variable length string return
我正在为 return 字符串编写一个函数
function doc () Result s
character (Len=65) :: s
...
end function
是否可以有一个可变长度的字符串,我可以在哪里
分配正在 returned 的字符串的长度。我知道我可以使用子例程来完成它,但不能使用函数。
Function discl (nm) Result (s)
Character (Len=:), Allocatable :: s
Character (Len=*), Intent (In) :: nm
Integer :: n
Character (Len=65) :: stamp
stamp = "Thu May 7 15:13:48 BST 2015"
n = Len_trim (stamp)
Allocate (Character (n) :: s)
s = Trim (fstamp)
End Subroutine discl
您可以为此目的使用可分配的字符串:
module str_mod
implicit none
contains
function str2str(str) result(s)
implicit none
character(len=*),intent(in) :: str
character(len=:),allocatable :: s
allocate( character(len=2*len(str)) :: s )
s = str // str
end function
end module
program test
use str_mod
print *,str2str('test')
end program
子程序和函数是一样的。只有 header 不同,但您可以将结果变量用作任何其他变量。我最喜欢的例子是整数到字符串的转换
function itoa(i) result(res)
character(:),allocatable :: res
integer,intent(in) :: i
character(range(i)+2) :: tmp
write(tmp,'(i0)') i
res = trim(tmp)
end function
结果变量在赋值时分配。您可以在赋值前使用 allocate statement
,但这是多余的。
我正在为 return 字符串编写一个函数
function doc () Result s
character (Len=65) :: s
...
end function
是否可以有一个可变长度的字符串,我可以在哪里 分配正在 returned 的字符串的长度。我知道我可以使用子例程来完成它,但不能使用函数。
Function discl (nm) Result (s)
Character (Len=:), Allocatable :: s
Character (Len=*), Intent (In) :: nm
Integer :: n
Character (Len=65) :: stamp
stamp = "Thu May 7 15:13:48 BST 2015"
n = Len_trim (stamp)
Allocate (Character (n) :: s)
s = Trim (fstamp)
End Subroutine discl
您可以为此目的使用可分配的字符串:
module str_mod
implicit none
contains
function str2str(str) result(s)
implicit none
character(len=*),intent(in) :: str
character(len=:),allocatable :: s
allocate( character(len=2*len(str)) :: s )
s = str // str
end function
end module
program test
use str_mod
print *,str2str('test')
end program
子程序和函数是一样的。只有 header 不同,但您可以将结果变量用作任何其他变量。我最喜欢的例子是整数到字符串的转换
function itoa(i) result(res)
character(:),allocatable :: res
integer,intent(in) :: i
character(range(i)+2) :: tmp
write(tmp,'(i0)') i
res = trim(tmp)
end function
结果变量在赋值时分配。您可以在赋值前使用 allocate statement
,但这是多余的。