未知长度的字符返回功能

时间:2014-03-17 16:43:56

标签: string function fortran character trim

如何使用结果最初未知长度的字符函数?

我理解trim()函数表明可以不指定返回字符串的长度。

例如:

write (*,*) trim(str)

将只返回字符串的一部分而没有尾随空格。

此函数对调用前返回字符串的长度一无所知。

trim()功能有限制吗?

更多变体是查找trim()函数的原始代码。

我找到了(Returning character string of unknown length in fortran),但这不是我的问题的答案。

可以肯定的是,我想编写函数,它按整数返回字符串。

这样的事情:

function strByInt(myInt)
...
write (strByInt,fmt) myInt; return
end function strByInt

somewhere else:

write (*,*) strByInt(50) ! will write '50'

2 个答案:

答案 0 :(得分:5)

你引用的那个问题部分地回答了它。它提到了具有延迟长度的可分配字符。请参阅下面我定期使用的实施方案:

  function strByInt(i) result(res)
    character(:),allocatable :: res
    integer,intent(in) :: i
    character(range(i)+2) :: tmp
    write(tmp,'(i0)') i
    res = trim(tmp)
  end function

结果变量在最后一行的赋值时分配,以适合答案。

trim函数是一个不同的野兽,作为一个内在函数,它不必在Fortran中编程,并且可以遵循不同的规则。它只返回它需要返回的东西。但它可以很容易地实现如上所述。

答案 1 :(得分:3)

Fortran2003具有可变字符长度功能。这是一个示例代码。 该程序输出" Beep!Beep!"字符串。

module m_test
  implicit none
contains
  function say2(text)
    character(len = *), intent(in) :: text
    character(len = :), allocatable :: say2
    say2 = trim(text) // trim(text)
    return
  end function say2
end module m_test

program String
  use m_test
  implicit none
  print *, say2('Beep!   ')
  stop
end program String

以下行声明可变长度字符变量。

  

字符(len = :),allocatable :: say2

您可能需要" /标准语义"或"启用F2003语义"在英特尔Fortran。