迭代FORTRAN字符数组

时间:2011-06-03 22:00:24

标签: arrays character fortran90 gfortran

好的,我在使用以下Fortran 90代码时遇到了很多麻烦。程序测试人员应该创建一个名为input的字符数组,将所有条目初始化为空格字符,然后从用户处获取一些字符串并将其存储在输入中。 getLength函数应该返回函数中不是空格的最后一个索引;所以如果用户输入字符串“你好,你好吗?”,那么getLength(输入)应该返回11.它应该通过从给定数组的结尾开始,并标记出现第一个非空格字符的位置。当我真正尝试运行它时,gfortran说:“错误:函数getLength返回类型不匹配(1)(REAL(4)/ INTEGER(4))。这是什么意思,我做错了什么,以及如何我应该修理它吗?先谢谢!

    program tester
    implicit none
    character(len = 1000) :: input
    external getLength
    do i = 1, 1000
        input(i) = " " 
    end do
    read *, input
    print *, getLength(input)
    end program

    integer function getLength(array) result (length)
    character(len=1000) :: array
    integer :: lenTemp = 1000
    do while (array(lenTemp:lenTemp) == ' ')
        lenTemp = lenTemp - 1
    end do
    length = lenTemp
    end function

1 个答案:

答案 0 :(得分:1)

看起来你没有声明外部函数getLength的类型,所以编译器假设getLength是默认类型REAL(4)。考虑将external getLength换成INTEGER, EXTERNAL :: getLength类型的内容。

此外,为了更加清晰,在函数定义中包含IMPLICIT NONE可能不会有什么坏处。

编辑:此外,通过Fortran处理字符串的方式,您只需将变量输入初始化为空字符串或一个空格。当你没有完全填充它时,Fortran将始终用空格填充字符串的剩余部分。您确实应该执行CHARACTER(LEN=1000) :: input = ''之类的操作来正确初始化input