我在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. 查找C字符串中的二維字符數組中的字符串
- 8. 在字符數組中查找字符串值
- 9. 如何在字符串中查找字符串數組?
- 10. 在字符串中查找字符串
- 11. 查找字符串的字符串數組與GLib的
- 12. 查找字符串數組中的Java
- 13. 在字符串數組中傳遞查詢字符串值
- 14. 字符串數組中的字符串
- 15. 比較字符串數組和字符串二分法查找
- 16. Typescript字符串|字符串[]查找數組長度
- 17. 查找字符串值
- 18. 在字符串中找到一個數組中的字符串
- 19. 查找字符串中的字符
- 20. 查找字符串中的數字xslt
- 21. 找到字符串數組中字符串的最快方法
- 22. 查找字符串中重複子字符串的數量
- 23. 顯示字符串數組中的字符串變量的值
- 24. 正則表達式查找字符串中的字符串中的字符串
- 25. 查找字符串中的
- 26. 查找2個字符串之間的字符串值
- 27. 查找字符串
- 28. 查找字符串
- 29. 查找字符串
- 30. 查找字符串
[不是一個非常有用的評論,但:'findloc'工程字符數組? [這不是F90,也沒有廣泛實施。] – francescalus 2015-02-24 18:44:16