如何处理这种陈述?

时间:2011-10-20 05:54:53

标签: fortran

我有String变量,最多80个字符。 我将变量声明为CHARACTER STRING*80CHARACTER*80 STRING 如果用户输入少于80个字符,则会在剩余位置附加一些特殊字符。

你能告诉我怎么办吗?

澄清: 我想知道如何用其他字符填充字符串中的剩余空格。

3 个答案:

答案 0 :(得分:2)

使用空字符串预定义字符串,以填充空格。然后使用trim来获取没有尾随空格的字符串。您还应该在声明中使用字符(len = 80)。

编辑,更新:您可以使用类似

之类的其他字符替换字符串中的尾随空格
do i=len_trim(string)+1,len(string)
  string(i:i) = 'A'
end do

答案 1 :(得分:2)

我不明白“如果用户输入少于80个字符,则会在剩余位置附加一些特殊字符。” - Fortran的方法是在IO或赋值上附加空格来填充字符串。您可以通过以下测试程序看到它。它还包括haraldkl显示的方法,用于将尾随空白更改为其他角色。问题在于难以区分“真实”尾随空白和填充空白。

module subs

contains

   subroutine write_string (string)

   character (len=10), intent (in) :: string
   integer :: i

   write (*, '(">", A10, "<")' ) string

   do i=1, 10
      write (*, *) i, ichar (string (i:i))
   end do

   return

end subroutine write_string

end module subs


program test_string

use subs

character (len=10) :: string
integer :: i


!  Assignment test

string = "abc"

call  write_string (string)


!  Read test
string = "123456789"

write (*, '("Input string:")' )
read (*, '(A)' ) string

call write_string (string)



!  replacing the trailing blanks:

do i=len_trim (string)+1, 10
   string(i:i) = "+"
end do

call write_string (string)

stop
end program test_string

答案 2 :(得分:0)

您可以定义一个包含80个字符的字符串(比如空格),然后逐个字符地输入,因此保持所有元素不变:

[' ', ' ', ' ' ... ' ']

['h', ' ', ' ' ... ' ']

['h', 'e', ' ' ... ' ']

['h', 'e', 'l' ... ' ']