我正在尝试重复字符串“k”以匹配“text”的长度,而不会越过长度。所以它会输出“treetreetreetreetreet”而不是“treetreetreetreetreetree”。我真的不知道从哪里开始除了输出比需要更多的字符。
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
答案 0 :(得分:2)
首先,您的示例程序按原样生成treetreetreetreetreetree
,它实际上会生成tree tree tree ...
。当您将字符串k
传递给REPEAT
时,tree
之后的空格也会重复出现。您应该在重复之前修剪字符串,例如REPEAT(trim(k),times)
。
有几种方法可以解决您的主要问题 - 我建议您使用目前为止所拥有的内容,但将最终结果缩小到您想要的长度 - 在这种情况下LEN_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