gpt4 book ai didi

fortran - Fortran 中的字符串 : Portable LEN_TRIM and LNBLNK?

转载 作者:行者123 更新时间:2023-12-02 21:06:07 25 4
gpt4 key购买 nike

我需要一个可移植函数/子例程来定位字符串中最后一个非空白字符的位置。我找到了两个选项:LEN_TRIMLNBLNK。然而,不同的编译器似乎有不同的标准。以下编译器的官方文档表明 LEN_TRIM 是以下平台上 Fortran 95 标准的一部分:

但是,对于 F95 标准之前发布的编译器,似乎没有任何保证。我的经验是,较旧的编译器可能会指定 LEN_TRIMLNBLNK,但不一定两者都是。我的解决方案是使用预处理器条件:

#ifdef USE_LEN_TRIM
iNameLen = LEN_TRIM(cabase)
iExtLen = LEN_TRIM(caext)
#else
iNameLen = LNBLNK(cabase)
iExtLen = LNBLNK(caext)
#endif

然后将-DUSE_LEN_TRIM传递给预处理器。但是,我不太喜欢预处理器条件和额外的编译时标志。 对于定位字符串中最后一个非空白字符的位置的可移植(Fortran 95 标准之前)函数,您有什么建议吗?

最佳答案

LEN_TRIM 是 Fortran 95 标准的一部分。我不知道 Fortran 77 中是否有任何简单的内在函数组合可以解决这个问题(TRIM 也出现在 Fortran 95 中,但在 Fortran 77 中不可用)。但是,如果您确实希望在不依赖编译器内部函数和预处理器的情况下实现可移植,则可以使用简单的用户函数来执行该任务:

  function lentrim(s)
implicit none
character(len=*) :: s
integer lentrim

do lentrim = len(s), 1, -1
if (s(lentrim:lentrim) .ne. ' ') return
end do
end function lentrim

(使用 g77gfortran 进行测试;使用选项 -ffree-form 编译像这样的自由格式源代码)。

关于fortran - Fortran 中的字符串 : Portable LEN_TRIM and LNBLNK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1257031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com