2017-02-25 6 views
1

文字列 "k"を繰り返して長さを超えずに "text"の長さに一致させようとしています。したがって、 "treetreetreetreet"ではなく "treetreetreetreet"を出力します。私は本当に必要以上に多くの文字を出力する以外にどこから始めるべきかわかりません。別の文字列の長さに合わせて1つの文字列を繰り返すにはどうすればよいですか?

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 ...を生成します。文字列kREPEATに渡すと、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

関連する問題