2012-11-09 36 views
0

我正在嘗試編寫一個簡單的Fortran代碼,用於練習。它應該在一個範圍內乘以數字。每次,生成的產品都會轉換爲字符串,因爲我想查看它是否包含相同的數字。Fortran:整型字符串示例

我測試了將整數轉換爲字符串並鍵入字符串組件的方式,並且一切正常。然後,我需要比較字符串的組成部分,爲此我使用string(number:number)。但我無法讓代碼正確地做到這一點。

下面的代碼和輸出:

program test 
implicit none 
character(10) myString 
character(1) a,b,c,d,e,f 
integer::i,j,k 
do i=900,901,1 
     j=900 
     k=i*j 
     write(*,*)'k =', k 
     write(myString,'(i10)') k 
     write(*,*)'myString = ', myString 
     a=myString(1:1) 
     b=myString(2:2) 
     c=myString(3:3) 
     d=myString(4:4) 
     e=myString(5:5) 
     f=myString(6:6) 
     print*,a,b,c,d,e,f 
     if (d==f) then 
      print*,'hobla' 
     else 
      print*,'fobla' 
     end if 
end do 

stop 
end program test 

所以我定義的字符:A,B,C,d,E,F爲包含字符串的部件。並使用myString(i:i)來定位每個組件並將其存儲在字符a,b,c,d,e,f中的一箇中。 但似乎只有前兩個工作正常,其餘沒有被存儲!

輸出:

k =  810000 
myString =  810000 
    81 
fobla 
k =  810900 
myString =  810900 
    81 
fobla 

通知81.這是應該給予810000的第一次,並打印 「hobla」。並第二次給予810900並打印「fobla」。但是這沒有發生!

任何人都可以告訴我如何讓myString接受零字符?

+0

我不明白。 'myString'確實有0,當你寫'(*,*)'myString =',myString'時,它正在打印它們。究竟是什麼問題? – tpg2114

+0

是的,對不起。我真正的意思是字符a,b,c,d,e,f應該包含myString的組件。但只有a,b顯示其餘的被忽略。這就是它打印81的原因。我不確定這裏有什麼問題。 – stupidity

回答

2

好吧,所以我想出了問題。考慮以下修改代碼:

program test 
implicit none 
character(10) myString 
character(1) a,b,c,d,e,f 
integer::i,j,k 
do i=900,901,1 
    j=900 
    k=i*j 
    write(*,*)'k =', k 
    write(myString,'(i10)') k 
    write(*,*)'myString = ', myString 
    a=myString(1:1) 
    b=myString(2:2) 
    c=myString(3:3) 
    d=myString(4:4) 
    e=myString(5:5) 
    f=myString(6:6) 
    write(*,*) a 
    write(*,*) b 
    write(*,*) c 
    write(*,*) d 
    write(*,*) e 
    write(*,*) f 
    if (d==f) then 
     print*,'hobla' 
    else 
     print*,'fobla' 
    end if 
end do 

stop 
end program test 

輸出的結果是:

k =  810000 
myString =  810000 




8 
1 
fobla 
k =  810900 
myString =  810900 




8 
1 
fobla 

這是因爲打印時I格式右對齊的數字。所以有一堆領先的空格,因爲你的數字只有6位數,而你寫入的字符串是10位。所以你得到4個前導空格。

如果您改變格式字符串,所以你有:

write(myString,'(i10.10)') k 

然後,而不是用空格則它會用0的填充。這樣,如果你願意,你總是可以有數字進行比較。

4

此語句

​​

寫入k的值成一個10個字符的字段。由於k只有6位有效數字,因此myString中的前4個字符填充了空格。然後,將myString(即4個空格和數字8和1)的前6個字符分配給變量a,b,c,d,e,f並將其打印出來 - 4個空格和2個數字。

嘗試打印出位於myString的位置7..10的其他字符,您應該看到「缺失」數字。

+0

謝謝你的確:) – stupidity