【发布时间】:2016-01-05 23:16:18
【问题描述】:
这是我想在 Fortran 中执行的 python3 示例:
str1 = "Hello"
str2 = " World!"
print(str1 + str2)
# And then the result would be "Hello World!"
当我这样做时:
print "(A)", str1, str2
它把它放在一个单独的行上。如果有人知道如何提供帮助,请回答。
【问题讨论】:
这是我想在 Fortran 中执行的 python3 示例:
str1 = "Hello"
str2 = " World!"
print(str1 + str2)
# And then the result would be "Hello World!"
当我这样做时:
print "(A)", str1, str2
它把它放在一个单独的行上。如果有人知道如何提供帮助,请回答。
【问题讨论】:
使用// 运算符的字符串连接的字面答案在另一个答案中给出。请特别注意,您可能希望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" ! Intentionally longer - trailing blanks
character(12), parameter :: str2=" World!"
print "(2A)", TRIM(str1), TRIM(str2)
end
会有类似的输出
Hello World!
使用中间空格,因为TRIM 不会从str2 中删除前导 空格。更广泛地说,虽然我们不会在那里为我们提供领先空间,但我们希望将其添加到输出中。
当然,串联仍然有效(我回到假设不修剪)
character(*), parameter :: str1="Hello" ! No trailing blank
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
最后一个有有用的冒号编辑描述符(在这个答案的范围之外)。
【讨论】:
【讨论】:
看起来这已经涵盖了,但另一个有用的功能,如果你想在同一行打印大量数据,如下:
character(len=32),dimension(100) :: str
do i=1,100
write(*,fmt="(A)", advance='no') str(i)
end do
write(*,*) ! to go to the next line when you are done
这将在同一行打印 100 个字符,因为 Advance='no'
【讨论】:
str 的声明以澄清。
您可以使用另一个变量将它们放入其中,并将这两个字符串写入该新变量中:
Program combineString
character(len=100) :: text1, text2, text
text1 = "Hello,"
text2 = "My name is X"
write(text,'(A6, X, A20)') text1, text2
write(*,*) text
End Program
输出是:
Hello, My name is X
【讨论】: