我在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