2010-02-05 29 views
0

我正在創建一個程序,該程序遵循特定規則來計算給定文本文件中的單詞,音節和句子。getchar()並計算C中的句子和單詞

句子是由空格分隔的單詞的集合,以空格結尾。要麼 !要麼 ? 然而,這也是一個句子:

Greetings, earthlings.. 

我走近這個程序的方法是通過掃描文本使用的getchar同時提交一個字符()。我被禁止在內存中處理整個文本文件,它一次只能是一個字符或一個字。

這是我的兩難困境:使用getchar()我可以找出當前字符是什麼。我只是在循環中繼續使用getchar(),直到找到EOF字符。但是,如果句子最後有多個句點,它仍然是一個句子。這意味着我需要知道最後一個字符在我分析的那個字符之前是什麼,以及之後的那個字符。通過我的思考,這將意味着另一個getchar()調用,但是當我去掃描下一個字符(它現在跳過一個字符)時會產生問題。

有沒有人有一個建議,我怎麼能確定上述句子,確實是一個句子?

謝謝,如果您需要澄清或其他任何事情,請告訴我。

回答

4

你只需要實現一個非常簡單的state machine。一旦找到句子的結尾,您將保持該狀態,直到找到新句子的開頭(通常,這將是非空格字符,而不是終止符,例如。!或?)。

+0

這實際上是一個好主意,非常感謝。我明白你的意思,我很驚訝,我沒有想到這一點。謝謝! – Blackbinary 2010-02-05 14:08:59

+0

我還建議你閱讀字符塊,不管是按行還是按數量。一般來說,從內存中讀取更快,通常更容易調試(可以看到過去和將來的字母)。 – 2010-02-05 23:24:29

0

您需要一個可擴展的語法。在正則表達式中尋找示例並嘗試構建一個。

通常人類語言是多樣的,不容易解析,特別是如果你有口語語言來分析或不同的語言。在某些語言中,可能不清楚一個詞和一個句子之間的區別是

+0

這聽起來更復雜,然後我試圖。有一套有限的規則來定義句子,單詞和音節。我可以用if語句覆蓋。 – Blackbinary 2010-02-05 14:09:50

相關問題