我有String变量,最多80个字符。
我将变量声明为CHARACTER STRING*80
或CHARACTER*80 STRING
如果用户输入少于80个字符,则会在剩余位置附加一些特殊字符。
你能告诉我怎么办吗?
澄清: 我想知道如何用其他字符填充字符串中的剩余空格。
答案 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' ... ' ']