Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | left_middle | |||
character(len=*), | intent(in) | :: | right_middle |
pure function extract_same_part_middle(left_middle, right_middle) result(middle) use :: forgex_utf8_m implicit none character(*), intent(in) :: left_middle, right_middle character(:), allocatable :: middle integer :: i, j, max_len, len_left, len_right, len_tmp character(:), allocatable :: tmp_middle len_left = len(left_middle) len_right = len(right_middle) max_len = 0 middle = '' ! Compare all substring do i = 1, len_left do j = 1, len_right if (left_middle(i:i) == right_middle(j:j)) then tmp_middle = '' len_tmp = 0 ! Check whether match strings or not. do while (i+len_tmp <= len_left .and. j+len_tmp <= len_right) if (left_middle(i:i+len_tmp) == right_middle(j:j+len_tmp)) then tmp_middle = left_middle(i:i+len_tmp) len_tmp = len(tmp_middle) else exit end if end do ! Store the longest common part. if (len_tmp > max_len) then max_len = len(tmp_middle) middle = tmp_middle end if end if end do end do end function extract_same_part_middle