Fortran 如何重复一个字符串以匹配另一个字符串的长度?
我试图重复字符串“k”以匹配“text”的长度,而不超过长度。因此,它将输出“treetreetreet”,而不是“treetreetreetreetree”。我真的不知道从哪里开始,除了输出比需要更多的字符Fortran 如何重复一个字符串以匹配另一个字符串的长度?,fortran,fortran90,Fortran,Fortran90,我试图重复字符串“k”以匹配“text”的长度,而不超过长度。因此,它将输出“treetreetreet”,而不是“treetreetreetreetree”。我真的不知道从哪里开始,除了输出比需要更多的字符 PROGRAM test IMPLICIT NONE CHARACTER*30 :: text, k INTEGER :: times text = 'hello my name is anon' k = 'tree' times = (LEN_TRIM(te
PROGRAM test
IMPLICIT NONE
CHARACTER*30 :: text, k
INTEGER :: times
text = 'hello my name is anon'
k = 'tree'
times = (LEN_TRIM(text)/LEN_TRIM(k)) + 1
WRITE(*,*) REPEAT(k,times)
END PROGRAM test
首先,您的示例程序不会像您预期的那样生成
treetreetreetree
,而是实际生成tree…
。将字符串k
传递到REPEAT
时,树
后面的空格也会重复。您应该在重复之前修剪字符串,例如REPEAT(trim(k),times)
有几种方法可以解决您的主要问题-我建议您使用目前为止的方法,但将最终结果缩短到您想要的长度-在本例中LEN\u TRIM(text)
。一个很好的方法是将REPEAT
的输出存储在一个临时变量中,并只输出这个最终字符串的一个子集
通过这些修改和一些其他清理,您的代码如下所示:
program main
implicit none
character(len=30) :: text, k, str
integer :: times
text = 'hello my name is anon'
k = 'tree'
times = (LEN_TRIM(text)/LEN_TRIM(k)) + 1 ! -- Note integer division
str = REPEAT(trim(k),times)
write(*,*) str(1:LEN_TRIM(text))
end program main
它给出了所需的输出
> gfortran main.f90 && ./a.out
treetreetreetreetreet
感谢您的帮助,并发现了其他问题。