文字列変数は最大80文字です。 変数をCHARACTER STRING*80
またはCHARACTER*80 STRING
として入力しています ユーザーが80文字未満を入力すると、残りの位置に特殊文字が追加されています。このようなステートメントの処理方法は?
どうすればいいですか?
解説: 文字列内の残りのスペースを他の文字で埋める方法を知りたいと思います。
文字列変数は最大80文字です。 変数をCHARACTER STRING*80
またはCHARACTER*80 STRING
として入力しています ユーザーが80文字未満を入力すると、残りの位置に特殊文字が追加されています。このようなステートメントの処理方法は?
どうすればいいですか?
解説: 文字列内の残りのスペースを他の文字で埋める方法を知りたいと思います。
文字列を空白であらかじめ定義して、スペースで埋めてください。その後、トリムを使用して後続のスペースなしで文字列を取得します。宣言では、文字(len = 80)も使用する必要があります。
編集、更新:あなたは
do i=len_trim(string)+1,len(string)
string(i:i) = 'A'
end do
誤差の少ない(文字列)'、正しい宣言は、文字(LENです= 80)。 len =は省略できます。 –
アップアップ申し訳ありませんが、訂正していただきありがとうございます。 – haraldkl
ようなもので、いくつかの他の文字と文字列の末尾のスペースを置き換えることができますあなたはあなたの選択(たとえば、スペース)の80文字の文字列を定義し、得ることができます文字による入力文字、したがって、手つかずのすべての要素を残す:
[' ', ' ', ' ' ... ' ']
['h', ' ', ' ' ... ' ']
['h', 'e', ' ' ... ' ']
['h', 'e', 'l' ... ' ']
I「は、ユーザが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
コードタグ – tekknolagi
を使用してくださいと '80-strlenを、あなたは文字列の残りのスペースを埋めるしたいことを明確にしてくださいいくつかの文字 – tekknolagi