我在Fortran程序中有一个字符串数组。 不是单个字符串。我知道数组中的一个值是“foo”。我想知道包含“foo”的数组的索引。有没有办法找到比强力循环以外的索引?我显然不能使用“minloc”例程,因为我没有在这里处理数字。再次,只是为了确保:我不是在字符串中搜索子字符串。我正在搜索一个字符串数组中的字符串。查找字符串数组中的字符串值
回答
implicit none
integer i
character*8 a(100)
do i = 1,100
a(i)='foo'
enddo
a(42)='bar'
call f(a,len(a(1)),shape(a)*len(a(1)),'bar ')
end
subroutine f(c,n,all,s)
implicit none
integer n,all
character*(*) s
character*(all) c
write(*,*)index(c,s)/n+1
end
a.out -> 42
请注意,此代码将整个数组视为一个大字符串并搜索子字符串,以便它还会查找与组件字符串边界不匹配的匹配项。
例如。
a(2)='xxbar '
a(3)=' yyy'
,以确保您找到一个index
是n的整数倍需要一些额外的工作(由时间,当然你做一个简单的循环可能看起来更好):错误匹配与相邻的条目,如发生
对于“额外的工作”,大概意思是处理像'call f(['fob','arb','bar'],3,9 ,'bar')'? [在您的电话中缺少一个参数。] – francescalus 2015-02-24 20:31:59
哎呀,感谢您的支持。 – agentp 2015-02-24 20:33:01
好吧,想到它后,我想出了这个。它的工作原理,如果“foo”被称为是无论是从阵列缺席,或位于一个且只有一个地方:
character(len=3) :: tags(100)
integer :: test(100)
integer :: str_location
! populate "tags" however needed. Then search for "foo":
test=(/(i,i=1,100)/)
where (tags.ne."foo") test=0
str_location = sum(test)
我猜这实际上比蛮力循环更慢,但它使紧凑型码。我想过用“max test”来填充“测试”,但是这并没有说明阵列中没有“foo”的可能性。意见?
如果你想在没有'findloc'的情况下使用“compact”,那么'minval(pack([(i,i = 1,100)],tags.eq.'foo'))''。但这不是一个好方法。 – francescalus 2015-02-25 23:00:06
- 1. 从字符串值中查找特定的字符串数组
- 2. 在字符串中查找数组值
- 3. 查找字符串的二维数组中的字符串数
- 4. 查找字符串数组中的字符串的一部分
- 5. 查找包含字符串数组中子字符串的所有字符串
- 6. 查找字符串中的字符串
- 7. 查找字符串中的字符串
- 8. 查找字符串中的字符串
- 9. 查找字符串数组中的字符串
- 10. 在2d字符串数组中查找重复的字符串
- 11. 查找字符串/数组中的字符串
- 12. 优化查找字符串数组中最宽的字符串?
- 13. 查找字符串数组中最长的字符串
- 14. 查找C字符串中的二维字符数组中的字符串
- 15. 在字符数组中查找字符串值
- 16. 如何在字符串中查找字符串数组?
- 17. 查找并从字符串数组中提取字符串
- 18. 使用数组在字符串中查找子字符串?
- 19. 在字符串中查找字符串
- 20. 在字符串中查找字符串
- 21. 查找字符串的字符串数组与GLib的
- 22. PHP查找数组中的字符串?
- 23. 查找字符串数组中的Java
- 24. 查找数组中的字符串
- 25. 查找字符串中的数字字符串,并计数
- 26. 使用缩短的字符串从数组中查找字符串值
- 27. 在字符串数组中传递查询字符串值
- 28. 字符串数组查找字典
- 29. 字符串数组中的字符串
- 30. 查找给定的字符串值列表中的字符串
[不是一个非常有用的评论,但:'findloc'工程字符数组? [这不是F90,也没有广泛实施。] – francescalus 2015-02-24 18:44:16