Printing 如何在Fortran中组合两个字符串

Printing 如何在Fortran中组合两个字符串,printing,fortran,Printing,Fortran,下面是python3中的一个示例,说明了我想在Fortran中执行的操作: str1 = "Hello" str2 = " World!" print(str1 + str2) # And then the result would be "Hello World!" 当我这样做时: print "(A)", str1, str2 它把它放在另一行。如果有人知道如何帮助,请回答。可能接近您想要的: zz=trim(xx)//trim(yy) 另一个答案中给出了使用/运算符的字符串串联的

下面是python3中的一个示例,说明了我想在Fortran中执行的操作:

str1 = "Hello"
str2 = " World!"
print(str1 + str2)

# And then the result would be "Hello World!"
当我这样做时:

print "(A)", str1, str2

它把它放在另一行。如果有人知道如何帮助,请回答。

可能接近您想要的:

zz=trim(xx)//trim(yy)


另一个答案中给出了使用
/
运算符的字符串串联的文字答案。请特别注意,您可能希望
TRIM
第一个参数

但你的问题提出了另一个有趣的概念,那就是格式反转

对于格式
(A)
,我们有一个格式项。在输出列表中,我们有两个输出项。在通用输出语句中,我们将每个格式项(具有重复计数)应用于相应的输出项。因此,
str1
使用第一个格式项
A
进行处理,并显示一个字符串

第二个输出项
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
中删除前导空格。更广泛地说,虽然我们没有领先的空间,我们希望将其添加到输出中

当然,连接仍然有效(我回到了假设不进行修剪的状态)

但是我们可以选择我们的格式,使用
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'

您可以使用另一个变量将这些字符放入其中,并将这两个字符串写入该新变量:

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  

谢谢,它现在打印在同一行上,但是字符串之间有很大的空间。我想删除除1之外的所有空格。谢谢您的帮助。您的字符子字符串语法错误。也别忘了在最后完成记录。我想他是想使用字符串数组@标记您应该为
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