对于字符串连接的字面答案,可以使用//
运算符,在另一个答案中有详细介绍。特别注意,你可能想要 TRIM
第一个参数。
但是你的问题提出了另一个有趣的概念,那就是格式回退。
使用格式(A)
,我们有一个格式项。在输出列表str1,str2
中,有两个输出项。在一般的输出语句中,我们将每个格式项(带重复计数)应用于相应的输出项。因此,str1
会被第一个格式项A
处理,并显示一个字符串。
当到达第二个输出项str2
时,我们已经使用了单个格式项,到达了格式项列表的末尾。结果是看到了这种格式回退:也就是说,我们返回到列表中的第一项。此后,至关重要的是,我们开始一个新行。
因此,如果我们只想将这两个项目打印到一行上(它们之间没有空格或空行),我们可以使用以下方法(为了清晰起见忽略修剪):
print "(A)", str1//str2
或者我们可以使用一种没有这种反转的格式。
print "(2A)", str1, str2
print "(A, A)", str1, str2
第一个示例将这两个字符变量连接起来,形成一个更长的变量,并将其作为单个输出项打印。第二个示例分别打印这两个变量。
针对你提供的特定示例:
character(12), parameter :: str1="Hello"
character(12), parameter :: str2=" World!"
print "(2A)", TRIM(str1), TRIM(str2)
end
将会产生类似于以下的输出:
Hello World!
由于TRIM
不会删除str2
中的前导空格,因此需要加上中间空格。虽然在输出中没有前导空格,但我们希望将其添加到输出中。
当然,连接仍然有效(假设不修剪)。
character(*), parameter :: str1="Hello"
character(*), parameter :: str2="World!"
print "(A)", str1//" "//str2
end
但是我们可以选择使用X
编辑描述符来添加一个空格,以便更好地格式化。
print "(2(A,1X))", str1, str2
print "(A,1X,A)", str1, str2
print "(2(A,:,1X))", str1, str2
这个最终的示例中包含有用的冒号编辑描述符(超出了本答案的范围)。