【问题标题】:INDEX is not returning a match when using a variable substring使用变量子字符串时,INDEX 不返回匹配项
【发布时间】:2019-07-25 09:22:54
【问题描述】:

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

  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的标准参考,因为我找不到上面使用的内在函数的正确定义。

【问题讨论】:

    标签: fortran gfortran


    【解决方案1】:

    第一次尝试使用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,并且没有这些尾随空格。

    【讨论】:

    • 谢谢,有没有一些学习fortran的标准参考,因为我找不到上面使用的内在函数的正确定义。
    • 您可以阅读语言标准(找到的链接here),但您的编译器文档也可能提供此类描述。
    • @SameeranJoshi 如果你想要一本书,我会推荐oxfordscholarship.com/view/10.1093/oso/9780198811893.001.0001/…
    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多