[英]Fortran string comparison with .LT
我必須修復一個使用 Fortran、C 和 C++ 的非常古老的大型金融系統中的錯誤。 我主要是一個 C++ 人,不知道 abt Fortran! 我在理解 Fortran 語句時遇到問題,我認為該語句在我們的系統中引起了令人討厭的錯誤。...
if (instructions .lt. ' ') then
instructions = ' '
endif
instructions
是一個文本/字符串。
上面的代碼表現如何,它是否只比較第一個字符(至少我的測試表明)? 基本上這是一個生產問題,我正在嘗試為我的客戶提供解決方法。 一個正確的 Fortran 代碼來比較提交的字符串也可以......
提前致謝
if (instructions .lt. ' ') then
.lt。 Fortram 的意思是“小於”,因此,如果instructions
“小於”一個空格,請將其替換為一個空格。 它會考慮整個字符串,但由於右側只是一個空格,因此只需要查看instructions
的第一個字符; 如果第一個字符小於一個空格(即,它是一個控制字符,如果我們談論的是 ASCII),那么它小於; 如果第一個字符是空格或更大(即可打印字符),則它不小於。
不幸的是,經過驗證的答案是不正確的:比較將遵循“指令”的全長,即如果指令的第一個字符是空格,則第二個字符可能仍包含一個小於(隱式)空格的字符,因為第二個操作數將用空格填充到“指令”的長度。 在這種情況下,比較仍將評估為 .true..
從所陳述的問題中不可能得到正確的代碼答案,因為需要比較的意圖不清楚。
人們可以將問題解釋為全長比較就足夠了,發布的代碼就是這樣做的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.