! --- string having variable length --- MODULE variable_string_data IMPLICIT NONE TYPE v_string CHARACTER(LEN=80) :: str INTEGER :: ln END TYPE CONTAINS FUNCTION fnc_length( s ) RESULT( length ) IMPLICIT NONE CHARACTER(LEN=*), INTENT(IN) :: s ! (1) INTEGER :: ls INTEGER :: length ls = LEN(s) ! (1) IF ( s(ls:ls) /= ' ' ) THEN length = ls ELSE IF ( s(ls-1:ls-1) /= ' ') THEN length = ls - 1 ELSE length = INDEX(s,' ') - 1 ! (2) END IF END FUNCTION END MODULE ! ! main ! PROGRAM main USE variable_string_data, ONLY : v_string, fnc_length IMPLICIT NONE TYPE(v_string) :: vst PRINT '(1X, A)', 'Input a sentence. : ' READ '(A)', vst%str vst%ln = fnc_length( vst%str ) PRINT '(1X, A, "(", I2, " )" )', vst%str(1:vst%ln), vst%ln END PROGRAM main