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

一种简单的方法来做到这一点......

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 回答