我可以引用字符串函数结果的子字符串吗?
Can I reference a substring of a string function result?
我有一个函数 str
,它接受一个整数并将其转换为一个字符串。我还想考虑该值的字符串的子字符串,如果它是字符值而不是字符函数,这将很容易。
换句话说,我想写这样的东西:
str(12345)(2:3)
不必这样做:
character(10) :: c
c = str(12345)
print *, c(2:3)
或者滚动我自己的 substr()
函数。有什么方法可以做我想做的事而不用将字符值存储在临时字符变量中或编写另一个函数吗?
这是一个完整的程序:
program main
character(10) :: c
! works fine
c = str(12345)
print *, c(2:3)
! nope
print *, str(12345)(2:3)
! this would work if i wrote a substr function
print *, substr( str(12345), 2, 3 )
contains
character(len=1064) function str(k)
! convert an integer to string
integer, intent(in) :: k
write (str, *) k
str = adjustl(str)
end function str
end program main
不,您不能对 Fortran 表达式进行子字符串化或数组索引。函数结果是一个表达式。最接近避免临时的方法是使用 Fortran 2003 中的 associate
,但您也不会节省太多代码
associate(c=>str(12345))
print *,c(2:3)
end associate
我有一个函数 str
,它接受一个整数并将其转换为一个字符串。我还想考虑该值的字符串的子字符串,如果它是字符值而不是字符函数,这将很容易。
换句话说,我想写这样的东西:
str(12345)(2:3)
不必这样做:
character(10) :: c
c = str(12345)
print *, c(2:3)
或者滚动我自己的 substr()
函数。有什么方法可以做我想做的事而不用将字符值存储在临时字符变量中或编写另一个函数吗?
这是一个完整的程序:
program main
character(10) :: c
! works fine
c = str(12345)
print *, c(2:3)
! nope
print *, str(12345)(2:3)
! this would work if i wrote a substr function
print *, substr( str(12345), 2, 3 )
contains
character(len=1064) function str(k)
! convert an integer to string
integer, intent(in) :: k
write (str, *) k
str = adjustl(str)
end function str
end program main
不,您不能对 Fortran 表达式进行子字符串化或数组索引。函数结果是一个表达式。最接近避免临时的方法是使用 Fortran 2003 中的 associate
,但您也不会节省太多代码
associate(c=>str(12345))
print *,c(2:3)
end associate