fortran-lang/stdlib

Functions for the built-in string type

Beliavsky opened this issue · 0 comments

A few string functions I would like are

  1. count_char -- Count the number of times a single character c appears in a character variable s
  2. pos_char -- Returns an integer array of the positions where c appears in s
  3. replace -- Replace character a with b in s
  4. compress -- Replace 2 or more consecutive occurrences of a character in s with a single occurrence. This is useful for replacing multiple spaces with a single space.
  5. upper_case
  6. lower_case

Here is an implementation of count_char.

module string_funcs_mod
implicit none
private
public :: count_char
contains
elemental function count_char(s, c) result(ncount)
! count the number of times character c appears in string s
    character(len=*), intent(in) :: s
    character, intent(in) :: c
    integer :: ncount, i, len_trim_s
    len_trim_s = len_trim(s)
    ncount = 0
    do i = 1, len_trim_s
       if (s(i:i) == c) ncount = ncount + 1
    end do
    if (c == ' ') ncount = ncount + len(s) - len_trim_s
end function count_char
end module string_funcs_mod
!
program xstring_funcs
use string_funcs_mod
implicit none
print "(*(1x,i0))", count_char("hello world ", ["l", "a", " "])
end program xstring_funcs

output:
3 0 2