Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Fortran中输出时向字符串添加空格_Fortran_Fortran90 - Fatal编程技术网

在Fortran中输出时向字符串添加空格

在Fortran中输出时向字符串添加空格,fortran,fortran90,Fortran,Fortran90,我想在字符串中添加空格。例如:name是一个变量,等于“abcxyzdefg” 现在,我想将此字符串打印为:abc xyz defg 我用了这个程序 program name_space implicit none character(len=30) :: name = "abcxyzdefg" write(*,3) name 3 format (A3, 2X, A3, 2X, A4) end program 我希望输出为: abc xyz defg 但是

我想在字符串中添加空格。例如:
name
是一个变量,等于
“abcxyzdefg”

现在,我想将此字符串打印为:
abc xyz defg

我用了这个程序

program name_space
    implicit none
    character(len=30) :: name = "abcxyzdefg"

    write(*,3) name
    3 format (A3, 2X, A3, 2X, A4)

end program
我希望输出为:

abc xyz defg
但是,我是这样想的:

abc

必须参考相应的子字符串

write(*,3) name(1:3), name(4:6), name(7:)

只需执行
write(*,'(A3,1X,A3,…))name
第一个描述符打印
name
的前三个字符,然后输出列表完成,没有更多的项目要打印,因此write语句终止

使用输出语句

write(*,3) name
我们将
name
视为一个单独的转移项目,采用
A3
格式处理。此
A3
格式打印字符串的前三个字符

没有进一步的处理可以将项目转换为所需的形式

相反,我们可能希望有三种不同的转移项目。一种方法如中所示,使用单个子字符串:

write(*,3) name(1:3), name(4:6), name(7:10)
write(*,3) (name(i:i+2), i=1,4,3), name(7:)  ! Can use implied do if desired
我们还可以通过某种方式拆分名称以获得数组(如果元素的长度与我们知道的长度相同)。作为一个数组,每个元素形成一个单独的输出项:

write(*,3) TRANSFER(name, 'aaa', 3)
write(*,'(3A4)') split_into_chunks_of_4(name)
或者我们可以转换字符串以添加空格,然后输出:

write(*,'(A)') split_into_chunks(name)  ! for some suitable function
就这个问题而言,弗拉基米尔F的回答是最好的方法。在其他情况下,有许多选择


由于在字符串中插入空格的更一般的情况隐藏了许多困难的工作,因此给出一个方法的指示可能是公平的:

! Add spaces to a string str at the breakpoints bps
function split(str, bps)
  character(*), intent(in) :: str
  integer, intent(in) :: bps(:)
  character(LEN(str)+SIZE(bps)) :: split
  integer i
  split=''
  split(1:bps(1)-1) = str(1:bps(1)-1)
  do i=1, SIZE(bps)-1
    split(bps(i)+i:bps(i+1)-1+i) = str(bps(i):bps(i+1))
  end do
  split(bps(i)+SIZE(bps):) = str(bps(i):)
end function