5

我有一个非常简单的问题,我还没有找到答案。

有什么方法可以将字符(特别是空格)附加到已经在 Fortran 中初始化的字符?

显然

CHARACTER(2000) :: result
result = ''
result = result // ' '

不起作用。

4

1 回答 1

9

请注意,所有字符串在最后一个非空格字符之后都用尾随空格(空格字符)填充。这个非常重要!

'a' // ' ' really produces  'a '

result = result // ' '

生成一个 2001 字符串(您将附加到整个 2000 字符result,包括尾随空格),然后在分配时截断,因此result最终是相同的。

你可能想要

result = trim(result) // ' '

但它也是无用的,因为无论如何字符串都填充了尾随空格(空格)。

当您附加一些非空白内容时,这将是有意义的:

  character(4) :: str

  str = "a"
  str = trim(str) // "bcd"
  print *, str
end

它应该打印abcd


如果要使变量更大,则必须使用:

character(:), allocatable:: result
result = 'a'  !now contains 'a' and has length 1
result = result // 'b' !now contains 'ab' and has length 2

它也适用于空格字符:

character(:), allocatable:: result
result = ' '  !now contains ' ' and has length 1
result = result // ' ' !now contains '  ' and has length 2

(在旧版本的 Intel Fortran 中,必须为这种行为启用重新分配。)

于 2013-05-02T18:11:03.083 回答