2017-12-15 9 views
2

私は整数をとり、それを文字列に変換する関数strを持っています。また、その値の文字列の部分文字列を考慮したいと思います。文字列関数ではなく文字値であれば簡単です。文字列関数の結果の部分文字列を参照できますか?

言い換えれば、私はこのような何かを書きたいのですが:

str(12345)(2:3) 

代わりにこれを行うために有するので:

character(10) :: c 
c = str(12345) 
print *, c(2:3) 

または自分substr()機能を転がします。一時的な文字変数に文字値を格納したり、別の関数を記述したりせずに、自分がしたいことをする方法はありますか?

program main 

    character(10) :: c 

    ! works fine 
    c = str(12345) 
    print *, c(2:3) 

    ! nope 
    print *, str(12345)(2:3) 

    ! this would work if i wrote a substr function 
    print *, substr(str(12345), 2, 3) 

contains 

    character(len=1064) function str(k) 
     ! convert an integer to string 
     integer, intent(in) :: k 
     write (str, *) k 
     str = adjustl(str) 
    end function str 

end program main 
+0

@francescalusは保存されませんこの時点で私はあなたとVladimirの専門知識を受け入れることができてうれしいですが、私はまだ役に立つアイデアに興味があります – JohnE

+1

str()にオプションの引数を追加するとどうでしょうか?str(12345、idx = [2、 3]))? – roygvib

+0

ええ、それは配列に非常に似ています。私は実際に重複を検索しようとしましたが、最初のヒットのうちの1つを見ませんでした。 –

答えて

2

いいえ、あなたはサブストリングができないか、配列インデックスのFortranの式:

はここで完全なプログラムです。関数の結果は式です。一時的に回避する最も近いものは、Fortran 2003からassociateを使用しているが、あなたは多くのコードのいずれかので、それは同じでもない場合、私は知らないが、ウラジミールの答えは基本的に同じである

associate(c=>str(12345)) 
    print *,c(2:3) 
end associate 
関連する問題