【问题标题】:initialize fortran character array with variable length strings [duplicate]用可变长度字符串初始化fortran字符数组[重复]
【发布时间】:2021-12-30 06:12:34
【问题描述】:

我有一个代码,我在其中设置了一个带有一组默认“选项”的字符数组,我可能希望也可能不希望在代码执行期间覆盖它。如果我用长度相同(小于或等于最大可能长度 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)

我可以通过填充空格来使所有字符串都像这样相等

 character(len=5) :: s(3)=["a ","bb","c "]

但这对于我的实际示例来说有点乏味,因为我有一些很长的字符串,所以在大声计数时需要大量按空格键...有没有办法初始化字符具有可变长度变量的数组,即某种自动填充?

【问题讨论】:

    标签: arrays fortran


    【解决方案1】:

    需要在数组构造函数中手动指定type-spec,为

    character(len=5) :: s(3) = [character(len=5) :: "a", "bb", "c"]
    

    这会将数组中的每个元素转换为相同的类型,character(len=5),这样数组构造函数是合法的。

    【讨论】:

    • 不确定,语言律师您可以在数组构造函数中使用Character(len=Len(s)) 吗?这将避免必须指定长度两次。
    • @IanBush,如果您想要一个比“是”更详细的答案,这听起来像是一个合适的问题。
    猜你喜欢
    • 2015-07-25
    • 2013-03-15
    • 2010-12-14
    • 1970-01-01
    • 2013-06-24
    • 2014-10-16
    • 2017-06-14
    • 2016-10-19
    • 2014-04-01
    相关资源
    最近更新 更多