2017-02-25 1 views
1

길이를 초과하지 않고 "text"의 길이와 일치하도록 "k"문자열을 반복하려고합니다. 따라서 "treetreetreetreet"가 아니라 "treetreetreetreet"을 출력합니다. 나는 정말로 필요한 것보다 더 많은 문자를 출력하는 것 이외의 다른 것을 어디에서 시작해야할지 모른다.다른 문자열의 길이와 일치시키기 위해 하나의 문자열을 반복하는 방법은 무엇입니까?

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의 출력을 임시 변수에 저장하고이 최종 문자열의 서브 세트 만 출력하는 것입니다. 원하는 출력에게 도움을

> gfortran main.f90 && ./a.out 
treetreetreetreetreet 
+0

감사를 제공하고, 다른 문제에 얼룩을지게하는

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 

: 같은 이러한 수정하고 다른 정리 모두

, 당신의 코드가 보인다. – Dtaai