5

私はまだ答えを見つけていない非常に単純な問題を抱えています。

Fortran で既に初期化されている文字に文字 (特に空白) を追加する方法はありますか?

どうやら

CHARACTER(2000) :: result
result = ''
result = result // ' '

動作しません。

4

1 に答える 1

9

すべての文字列は、スペース以外の最後の文字の後に末尾の空白 (スペース文字) で埋められることに注意してください。これはとても重要です!

'a' // ' ' really produces  'a '

しかし

result = result // ' '

resultは 2001 文字の文字列を生成し (末尾の空白を含めて2000 文字全体に追加します)、割り当て時に切り捨てられるため、最終的resultには同じになります。

あなたが望むかもしれません

result = trim(result) // ' '

とにかく、文字列が末尾の空白 (スペース) で埋められるため、これも役に立ちません。

空白以外のものを追加すると意味があります。

  character(4) :: str

  str = "a"
  str = trim(str) // "bcd"
  print *, str
end

印刷する必要がありますabcd


変数を大きくしたい場合は、次を使用する必要があります。

character(:), allocatable:: result
result = 'a'  !now contains 'a' and has length 1
result = result // 'b' !now contains 'ab' and has length 2

スペース文字でも機能します。

character(:), allocatable:: result
result = ' '  !now contains ' ' and has length 1
result = result // ' ' !now contains '  ' and has length 2

(インテル Fortran の古いバージョンでは、この動作のために代入時に再割り当てを有効にする必要がありました。)

于 2013-05-02T18:11:03.083 に答える