邏輯行計數

2021-07-11 14:24:50 字數 2613 閱讀 5372

問題描述

有乙個軟體公司常常用一種不為人知的語言來開發程式,這個語言的特點如下:

有兩種形式的字串,一種為加單引號,另一種加雙引號。單引號的字串可以包含雙引號,雙引號的字串也可以包含單引號。字串不能分行,其中也不能包含同樣的引號字元。

有兩種注釋方式:@字元為行注釋,而雙括號(())內的文字為塊注釋。

塊注釋不能巢狀,所有在塊中的文字均被忽略。乙個塊可以包含幾行文字。

注釋不能出現在字串內。

在塊注釋中的行注釋字元和引號都是沒有意義的。

注釋行中的雙括號和引號都是沒有意義的。

程式的任何部分都不能出現「#」字元;即使在字串或注釋內。

分號用來終止語句和生命。每個不在注釋或字串中的分號都被作為程式邏輯行的結束。

可以用邏輯行數來粗略地評估程式的大小,即計算不在注釋或字串內的分號的個數。寫乙個程式讀進去幾組程式**,對每組**都輸出邏輯行數和物理行數,並對未終止的注釋塊和字串發出警告訊息。

輸入包含乙個或多個程式,以#表示每個程式終止,以##表示輸入終止。

對於包括未終止字串的行,輸出:「unterminated string in line n.」,其中n換成行號。

如果該程式包括乙個未終止的塊注釋,以如下格式輸出一行:」unterminated block comment at end of program.「

在錯誤資訊之後,以如下格式輸出一行:」program x contains y logical lines and z physical lines.「。其中x、y和z用相應的數字代替。

測試輸入

期待的輸出

時間限制

記憶體限制

額外程序

測試用例 1

以文字方式顯示

((block comment:))↵

"string";('another string;');@line comment↵

##↵

以文字方式顯示

program 1 contains 2 logical lines and 2 physical lines.↵

1秒64m0

題解思路

大致思路:

字元用getchar()乙個乙個讀入,然後再對每乙個字元進行判斷,根據判斷的結果再進行相關的處理。

具體實現:

分情況討論

(1)如果讀到『,則會出現以下的幾種情況,『』||『\n||『#||『##這幾種情況,當首次遇到#時程式 的計數變數++,輸出字串不完整,輸出程式中包含多少個邏輯行和物理行,輸出之後要把物理行和邏輯行的計數變數清0 ;遇到\n的時候物理行的計數變數++;

(2)如果讀到「,則判斷情況和上面的(1)情況是一樣的。

(3)如果讀到@,則會出現下面幾種情況,@\n||@#||@##這幾種情況,當首次遇到#時程式的計數變數++,輸出程式中包含多少個邏輯行和物理行,輸出之後要把物理行和邏輯行的計數變數清0 ;遇到\n的時候物理行的計數變數++;

(4)如果讀到(,則會出現以下情況(。。。(||((。。。。))||((#||((##||((。。。。)。。)||((\n這幾種情況。當首次遇到#時程式的計數變數++,輸出塊注釋不完整,輸出程式中包含多少個邏輯行和物理行,輸出之後要把物理行和邏輯行的計數變數清0 ;遇到\n的時候物理行的計數變數++;

(5)如果讀到;,邏輯行計數變數++。

(6)如果讀到#;程式的計數變數++,輸出程式中包括多少個邏輯行和物理行,輸出之後要把物理行和邏輯行的計數變數清0.

(7)如果讀到\n,物理行計數變數++。

在讀入的時候先用乙個while(1)迴圈進行大輸入,然後對於每種情況再用乙個while(1)進行迴圈輸入。要注意符合條件的時候要跳出迴圈。

實現**

#include#includeint main()

else if(t1=='\n')

else if(t1=='#')

else if(t2=='\n')

else

} }

} else if(t=='\"')

else if(t1=='\n')

else if(t1=='#')

else if(t12=='\n')

else

}else

; }

} else if(t=='@')

else if(t3=='#')

else if(t4=='\n')

else}}

else ;}

} else if(t=='(')

else if(t6=='#')

else if(t7=='\n')

else

}else if(t6==')')

else

} }

}else

}else if(t=='\n')

else if(t==';')

else if(t=='#')

else if(t10=='\n')

else

}else

; if(m==1)

} return 0;

}

邏輯行和物理行

物理行是你在編寫程式時所 看見 的。邏輯行是python 看見 的單個語句。python假定每個 物理行 對應一 個 邏輯行 邏輯行的例子如print hello world 這樣的語句 如果它本身就是一行 就像你在編輯器中看到的那樣 那麼它也是乙個物理行。預設地,python希望每行都只使用乙個語...

基於行的邏輯

2016.11.30 七 基於行的邏輯 case表示式只能作用於乙個特定的列。select columnlist from tablelist wherecondition order by columnlist where字句必須在 from 和order by 子句之間。其實,任何子句都遵從這一...

2 6 Python邏輯行與物理行

物理行是當你寫程式時看到的一行。邏輯行是python 看和的乙個單獨語句。python預設乙個物理行為乙個邏輯行。乙個邏輯行是乙個語句,像print hello world 如果它本身在一行上 像你在乙個編輯器中看到的 那麼,它也是乙個物理行。預設情況下,python鼓勵一行寫乙個語句的用法,這使 ...