2011-10-20 11 views
0

文字列変数は最大80文字です。 変数をCHARACTER STRING*80またはCHARACTER*80 STRINGとして入力しています ユーザーが80文字未満を入力すると、残りの位置に特殊文字が追加されています。このようなステートメントの処理方法は?

どうすればいいですか?

解説: 文字列内の残りのスペースを他の文字で埋める方法を知りたいと思います。

+0

コードタグ – tekknolagi

+0

を使用してくださいと '80-strlenを、あなたは文字列の残りのスペースを埋めるしたいことを明確にしてくださいいくつかの文字 – tekknolagi

答えて

2

文字列を空白であらかじめ定義して、スペースで埋めてください。その後、トリムを使用して後続のスペースなしで文字列を取得します。宣言では、文字(len = 80)も使用する必要があります。

編集、更新:あなたは

do i=len_trim(string)+1,len(string) 
    string(i:i) = 'A' 
end do 
+1

誤差の少ない(文字列)'、正しい宣言は、文字(LENです= 80)。 len =は省略できます。 –

+0

アップアップ申し訳ありませんが、訂正していただきありがとうございます。 – haraldkl

0

ようなもので、いくつかの他の文字と文字列の末尾のスペースを置き換えることができますあなたはあなたの選択(たとえば、スペース)の80文字の文字列を定義し、得ることができます文字による入力文字、したがって、手つかずのすべての要素を残す:

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

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

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

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

2

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 
関連する問題