2011-10-20 37 views
0

我有最多80個字符的字符串變量。 我聲明變量爲CHARACTER STRING*80CHARACTER*80 STRING 如果用戶輸入的字符少於80個字符,則會在剩餘位置附加一些特殊字符。如何處理這種陳述?

您能否讓我知道如何處理?

CLARIFICATION: 我想知道如何用其他字符填充字符串中的剩餘空間。

+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

我不明白,「如果用戶輸入少於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