我有一个非常简单的问题,我还没有找到答案。
有什么方法可以将字符(特别是空格)附加到已经在 Fortran 中初始化的字符?
显然
CHARACTER(2000) :: result
result = ''
result = result // ' '
不起作用。
请注意,所有字符串在最后一个非空格字符之后都用尾随空格(空格字符)填充。这个非常重要!
'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 中,必须为这种行为启用重新分配。)