去除字符串中的空格

fro*_*hem 3 fortran trim gfortran fortran90

我有以下代码:

  program main
     character (len=15) :: abc = "te st tex  t"
     print *, trim(abc)      
  end program main
Run Code Online (Sandbox Code Playgroud)

哪些输出:

 te st tex  t
Run Code Online (Sandbox Code Playgroud)

我排除了所有要删除的空格,但事实并非如此。如何从字符串中删除所有空格?

Jau*_*uch 5

Trim 只会删除边缘的空格,而不是中间的空格(这是几乎所有语言/库的常见行为)。如果要删除字符串中的所有空格,则必须创建自己的函数来执行此操作,并遍历字符串。

前任。:

program Test

implicit none

    ! Variables
    character(len=200) :: string

    ! Body of Test
    string = 'Hello World              7    9'
    print *, string
    call StripSpaces (string)
    print *, string


contains

    subroutine StripSpaces(string)
    character(len=*) :: string
    integer :: stringLen 
    integer :: last, actual

    stringLen = len (string)
    last = 1
    actual = 1

    do while (actual < stringLen)
        if (string(last:last) == ' ') then
            actual = actual + 1
            string(last:last) = string(actual:actual)
            string(actual:actual) = ' '
        else
            last = last + 1
            if (actual < last) &
                actual = last
        endif
    end do

    end subroutine

end program Test
Run Code Online (Sandbox Code Playgroud)

这是在英特尔编译器上测试的,而不是在 gfortran 上测试的,但我认为它会起作用。

  • 准确地说,`trim` 只删除尾随空格,而不是前导空格。 (4认同)
  • 同样,这个答案没有解决 _how_ 删除所有空格(至少不是详细)。 (2认同)