【问题标题】:Fortran assignment of values to elements of 2dim arrays - ICHARFortran 将值分配给 2dim 数组的元素 - ICHAR
【发布时间】:2020-09-22 17:09:57
【问题描述】:

我有一个二阶(矩阵)数组 a(i,j),其中每个元素都是一个 ASCII 字符,例如 A&^ 等。当我想将数组元素转换为其整数代码,例如b(i,j)=ichar('a(i,j)') 我得到以下Error: Argument of ICHAR at (1) must be of length one,这很奇怪,因为每个 a(i,j) 都是单个 ASCII 字符。我可以执行以下操作(让 a(1,2) 为 A):y=a(1,2)z=ichar('y'),(y=A,z=121),但随后我松散了数组结构,因为当我尝试打印出 @ 987654328@(编译后)我得到
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
Backtrace for this error:
#0 0x7f301bac08da
等等(我有integer, dimension(:,:), allocatable :: b

如何形成b(i,j)=ichar('a(i,j)') 以及如何处理b(i,j) 的选定元素,以便能够在程序中的进一步计算中操纵它们?

我需要 b(i,j) 的数组结构,因为 a(i,j) 有数百列和行,而且我想在进一步的过程中将 b(i,j) 与 a(i,j) 关联起来b(i,j) 元素的操作。即使可能,切换到“lenght one”也会非常笨拙。

【问题讨论】:

  • 没有阅读我在您的其他问题中发布的 2 个示例?这些向您展示了如何使用ichar

标签: arrays char fortran rank


【解决方案1】:

当你写作时

b(i,j)=ichar('a(i,j)')

您将字符串a(i,j) 传递给函数ichar,它只需要一个character。如果a 是一个字符矩阵,那么您必须将其中一个条目的值传递给ichar,如

b(i,j)=ichar(a(i,j))

【讨论】:

  • 当然,既然ichar元素,如果ab 具有相同的形状,则可以简单地写成b = ichar(a)
  • 在没有使用fortran 的几年之后,我似乎不太记得它了。谢谢你的评论:)
  • 我的意思是,b(i,j)=ichar(a(i,j)) 对我不起作用(分段错误),但 b=ichar(a) 完美无缺。
  • @Fvwm,如果你在你的问题中MCVE,我们可以看看。
  • @Fvwm,如前所述,您需要提供有关分段错误的更多详细信息(可能在 another 问题中),但如果 b=ichar(a) 有效且 b(i,j)=ichar(a(i,j))那么一个很好的猜测是您在尝试使用单个元素之前没有分配bb=. b 作为分配的一部分自动分配;使用b(i,j)=... 必须先分配数组。
猜你喜欢
  • 2014-03-27
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
相关资源
最近更新 更多