使用可变子字符串时,INDEX 未返回匹配项

INDEX is not returning a match when using a variable substring

我已经用 gfortran 和 AOCC flang 编译器编译了代码,但是两者都失败了,我做错了什么吗?

  program find_sub_indx
        implicit none
    !decl
        character(len =30) :: main_string, sub_string
        integer ::  index_1 , index_2
        logical :: back
    !defn   
        main_string = "this is the main string"
        sub_string = "a"
        back = .false.

        index_1 = INDEX(main_string, sub_string, back)  !why does this not work 
        index_2 = INDEX("this is the main string","a", .false.) !this works why?
        print *, "index_1 is " , index_1, index_2
    end program find_sub_indx

预期结果:

index_1 is             14           14

实际结果:

index_1 is             0           14

有没有学习fortran的标准参考,因为我找不到上面使用的内在函数的正确定义。

第一次尝试使用index

INDEX(main_string, sub_string, back)

变量main_stringsub_string的长度都是30,赋值后

 sub_string = "a"

变量 sub_string 的值以 a 开头,但后面有 29 个尾随空格

因此,函数的计算方式类似于

INDEX(main_string, 'a                             ', back)

当然,在 main_string 中找不到该子字符串,结果是正确的 0

您可以改用

INDEX(main_string, TRIM(sub_string), back) !or
INDEX(main_string, sub_string(1:1), back)

或声明 sub_string 的长度为 1

第二次尝试中的文字常量 "a" 的长度为 1,并且没有这些尾随空格。