3

フレーズを逆にするプログラムを作成する必要があります。

例:私が書くときhello guys、私は欲しいsyug olleh

これは私が今のところ持っているものですが、ボードの文字を逆にする方法がわかりませんphraseT

program reversing    
implicit none    
character(len=20),dimension(1:20)::phraseT    
character(len=20)::phrase,reverse    
integer::i,x


write(*,*)"write a phrase  :"    
read(*,'(a)')phrase    
x=len(trim(phrase))    
nomT(1:20)=" " 

do i=1,x    
nomT(i:i)=trim(phrase(i:i))    
end do

write(*,*)nomT    
end program reversing
4

4 に答える 4

3

これを行うためのより短い方法は次のとおりです。

forall (i=1:len(string)) string(i:i) = string(len(string)-i+1:len(string)-i+1)

ほんの一握りのバイトも節約できます!しかし、これがよりインテリジェントであると私が提案するかどうかはわかりません。

于 2012-05-21T10:42:24.310 に答える
2

それを行う簡単な方法の1つ...

character(80) :: string = "Whatttt's up doc?"
character     :: temp
integer       :: i, length

write (*,*) string    ! Writes it out proper.
  length = len_trim(string) ! ignores trailing blanks. 
                            ! use len(string) to reverse those as well
  do i = 1, length/2
     temp = string(i:i)
     string(i:i) = string(length+1-i:length+1-i)
     string(length+1-i:length+1-i) = temp
  end do
write(*,*) string     ! Writes it out backwards.
end

他の人は確かにもっとインテリジェントなもの(そしてもっと短いもの)を思い付くでしょう。

于 2012-05-15T17:29:59.493 に答える
1

配列とは異なり、文字には「要素」を選択する高度な方法がありません。サブストリングは連続している必要があります(特に「逆順」は除外されます)。ここでの他の回答のアプローチは、次のとおりです。長さ1の部分文字列を個別に選択する式を使用して、新しい文字列を作成します。例として、一致する部分文字列を選択する単純なループがあります。

個々のサブ文字列から配列を作成する場合、並べtransfer替えられた要素を文字列として戻すために使用できます。

配列コンストラクターの暗黙のループと同様に、内部書き込みでI/Oの暗黙のループを使用できます。

implicit none

character(*), parameter :: string = 'abcde'
character(len(string))  :: reverse
integer i

write(reverse,'(*(A))') (string(i:i),i=len(string),1,-1)

write(*,'(A)') string, reverse

end

transferただし、このアプローチは、内部ファイルがI / O出力項目リストに表示されないため、「インプレース」で使用することはできません(これとは異なります)。中間変数を使用できます。

于 2020-11-20T10:04:40.857 に答える
0

@Rookの答えは、奇数の文字列でも機能しますか?とにかく、これが私の試みです。これは、末尾の空白も考慮に入れた彼の答えに触発されたものです。

    ! Reverse the string
    function reverse_string(string) result(gnirts)

        character(len=*) :: string
        character(len(string)) :: gnirts
        character(1) :: temp
        integer :: i, length

        length = len(string) 

        do i = 1,length
            gnirts(length-i+1:length-i+1) = string(i:i)
        end do

end function reverse_string
于 2019-01-26T19:47:06.967 に答える