使用可变子字符串时,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_string
和sub_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,并且没有这些尾随空格。
我已经用 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_string
和sub_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,并且没有这些尾随空格。