2017-02-25 31 views
1

我想重複字符串「K」來匹配「文本」的長度而不會超過長度。所以它會輸出「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 

回答

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 
+0

感謝您的幫助,並驗出其他問題。 – Dtaai

相關問題