这是我想在Fortran中执行的操作的python3示例:
str1 = "Hello"
str2 = " World!"
print(str1 + str2)
# And then the result would be "Hello World!"
Run Code Online (Sandbox Code Playgroud)
当我做:
print "(A)", str1, str2
Run Code Online (Sandbox Code Playgroud)
它放在单独的行上。如果有人知道如何帮助,请回答。
使用//运算符对字符串连接的字面答案在另一个答案中给出。请特别注意,您可能想要TRIM第一个参数。
但是您的问题还有另一个有趣的概念,那就是格式还原。
对于格式,(A)我们只有一个格式项。在输出列表中,str1, str2我们有两个输出项。在一般输出语句中,我们将每个格式项(带有重复计数)应用于相应的输出项。因此,str1使用第一个格式项处理A,然后出现一个字符串。
来到第二个输出项目,str2我们已经使用了单个格式项目,到达格式项目列表的末尾。结果是我们看到了这种格式转换:也就是说,我们返回到列表中的第一项。至关重要的是,之后,我们开始了一条新生产线。
因此,如果我们只想将这两个项目打印到一行(它们之间没有空格或空白行),则可以使用(忽略修剪以保持清晰度)
print "(A)", str1//str2
Run Code Online (Sandbox Code Playgroud)
或者我们可以使用没有此版本的格式
print "(2A)", str1, str2
print "(A, A)", str1, str2
Run Code Online (Sandbox Code Playgroud)
第一个将两个字符变量连接在一起,给出一个更长的字符变量,然后将其打印为单个输出项。第二个单独打印。
来到你的例子
character(12), parameter :: str1="Hello" ! Intentionally longer - trailing blanks
character(12), parameter :: str2=" World!"
print "(2A)", TRIM(str1), TRIM(str2)
end
Run Code Online (Sandbox Code Playgroud)
将有输出像
Hello World!
Run Code Online (Sandbox Code Playgroud)
中间的空间,因为TRIM不会从中删除前导空间str2。更广泛地说,尽管我们没有领先的空间,但我们希望将其添加到输出中。
自然地,串联仍然有效(我回到假定不修剪的状态)
character(*), parameter :: str1="Hello" ! No trailing blank
character(*), parameter :: str2="World!"
print "(A)", str1//" "//str2
end
Run Code Online (Sandbox Code Playgroud)
但是我们可以使用X编辑描述符选择格式,以添加空格
print "(2(A,1X))", str1, str2
print "(A,1X,A)", str1, str2
print "(2(A,:,1X))", str1, str2
Run Code Online (Sandbox Code Playgroud)
其中最后一个具有有用的冒号编辑描述符(此答案的范围之外)。