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

时间:2017-02-25 01:03:24

标签: fortran fortran90

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

1 个答案:

答案 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