如何重复一个字符串以匹配另一个字符串的长度?

How do I repeat one string to match the length of another string?

我正在尝试重复字符串 "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

首先,您的示例程序并没有像您期望的那样生成 treetreetreetreetreetree,它实际上生成了 tree tree tree ...。当您将字符串 k 传递给 REPEAT 时,tree 之后的空格也会重复。您应该 trim 重复之前的字符串,例如 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