用可变长度字符串初始化 Fortran 字符数组
initialize fortran character array with variable length strings
我有一个代码,我在其中设置了一个带有一组默认“选项”的字符数组,我可能希望也可能不希望在代码执行期间覆盖它。如果我用所有相同长度的字符串(短于或等于最大可能长度 5)初始化数组,则代码有效:
PROGRAM test
character(len=5) :: s(3)=["a","b","c"]
s(1)="12345678"
print *,s
END PROGRAM test
产出
12345b c
但是如果字符串是可变长度的。
character(len=5) :: s(3)=["a","bb","c"]
然后我得到一个编译错误:
Error: Different CHARACTER lengths (1/2) in array constructor at (1)
我可以通过填充 spaces 使所有字符串像这样相等来使其工作
character(len=5) :: s(3)=["a ","bb","c "]
但这对于我的实际示例来说有点乏味,因为我有一些很长的字符串,所以有很多 space-bar-pressing-while-counting-out-loud... 是有一种方法可以初始化具有可变长度变量的字符数组,即某种自动填充?
需要在数组构造函数中手动指定type-spec,如
character(len=5) :: s(3) = [character(len=5) :: "a", "bb", "c"]
这会将数组中的每个元素转换为相同类型,character(len=5)
,这样数组构造函数是合法的。
我有一个代码,我在其中设置了一个带有一组默认“选项”的字符数组,我可能希望也可能不希望在代码执行期间覆盖它。如果我用所有相同长度的字符串(短于或等于最大可能长度 5)初始化数组,则代码有效:
PROGRAM test
character(len=5) :: s(3)=["a","b","c"]
s(1)="12345678"
print *,s
END PROGRAM test
产出
12345b c
但是如果字符串是可变长度的。
character(len=5) :: s(3)=["a","bb","c"]
然后我得到一个编译错误:
Error: Different CHARACTER lengths (1/2) in array constructor at (1)
我可以通过填充 spaces 使所有字符串像这样相等来使其工作
character(len=5) :: s(3)=["a ","bb","c "]
但这对于我的实际示例来说有点乏味,因为我有一些很长的字符串,所以有很多 space-bar-pressing-while-counting-out-loud... 是有一种方法可以初始化具有可变长度变量的字符数组,即某种自动填充?
需要在数组构造函数中手动指定type-spec,如
character(len=5) :: s(3) = [character(len=5) :: "a", "bb", "c"]
这会将数组中的每个元素转换为相同类型,character(len=5)
,这样数组构造函数是合法的。