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
Fortran 如何重复一个字符串以匹配另一个字符串的长度?_Fortran_Fortran90 - Fatal编程技术网

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

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

我试图重复字符串“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(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

感谢您的帮助,并发现了其他问题。