【发布时间】:2013-04-26 22:36:59
【问题描述】:
我有一个非常简单的问题,我还没有找到答案。
有什么方法可以将字符(特别是空格)附加到已经在 Fortran 中初始化的字符上?
显然
CHARACTER(2000) :: result
result = ''
result = result // ' '
不工作。
【问题讨论】:
我有一个非常简单的问题,我还没有找到答案。
有什么方法可以将字符(特别是空格)附加到已经在 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 中,必须为这种行为启用重新分配分配。)
【讨论】:
trim函数。