簡體   English   中英

在 Fortran 中返回不同長度的字符串數組

[英]Return an array of strings of different length in Fortran

我想創建一個類型來包含 Fortran 中的字符串數組,而無需顯式分配長度,以便我可以從函數中返回它。

以下是我的類型:

type returnArr
    Character (*), dimension(4)  :: array
end type returnArr

以下是函數的簽名:

type(returnArr) FUNCTION process(arr, mean, stdDev) result(j)

以下是我嘗試設置結果的地方:

j%array(1)= "Test"

但我得到的只是以下錯誤:

Error: Character length of component ‘array’ needs to be a constant specification expression at (1)

如何聲明類型以便字符串可以具有不同的長度?

派生類型的字符組件可能具有顯式長度,也可能具有延遲長度。 后者是改變其值的方式(通過多種方式中的任何一種)。 還需要在派生類型的數組中允許不同長度的靈活性。

但是,使用len=*不是說“延遲長度”(它是“假定長度”)的正確方法。 相反,您可以使用len=:並使組件可分配(或指針):

type returnArr
  Character (:), allocatable  :: char
end type returnArr

那么一個人可能有一個returnArr對象數組:

function process(arr, mean, stdDev) result(j)
  type(returnArr) :: j(4)
end function

賦值如

  j(1)%char = "Test"

然后依賴於組件char自動分配。

請注意,現在函數結果是該容器類型的數組。 我們做不到

function process(arr, mean, stdDev) result(j)
  character(:), allocatable :: j(:)
end function

並將j(1)分配到與j(2)不同的長度(等等)。

相似地

type returnArr
  Character (:), allocatable  :: char(:)
end type returnArr

不允許這些char組件元素具有不同的長度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM