2010-02-05 85 views
2

我正在編寫一個程序,用於解讀基本文本文件中給出的句子,音節和單詞。識別文本中的空格

程序循環遍歷文件逐個字符。 它首先看看它是否是某種類型的句末標記,如!?:;.。 然後,如果角色不是空格或製表符,則認爲它是角色。 最後,它確定如果它是一個空格或製表符,並且它之前的最後一個字符是有效的字母/字符(例如,不是句尾結束標記),則它是一個單詞。

我對細節稍微有點了解,但這裏是我的問題。 我的字數相當於我的句數。這解釋的是,它是否意識到,當有句末尾的標記時,一個單詞會停止,但真正的問題是空格被認爲是有效的字母。

我的繼承人if語句,以決定是否有問題的字符是一個字一個有效的一封信:

else if(character != ' ' || character != '\t') 

我已經通過程序中的該點排除結束句標記。 (如果真的在原文中)。從閱讀Ascii表格中,32應該是空格字符。 但是,當我輸出所有使它進入該代碼塊的字符時,空間就在那裏。

那麼我做錯了什麼?我如何阻止空間通過這個如果?

在此先感謝,我有一種感覺,這個問題可能有點模糊,或措辭不佳。如果您有任何疑問或需要澄清,請告訴我。

+2

哎呀!使用字符文字,男人!沒有意義讓你編碼*兩者都更難以閱讀和依賴字符集。就像這個'character!='''...並且使用''\ t''作爲標籤。 – dmckee 2010-02-05 15:32:21

回答

4

我注意到,

(character != 32 || character != 9) 

總是正確的。因爲如果字符是32它是不是9,和真或假的是真的......

你大概的意思

(character != ' ' && character != '\t') 
+0

&&而不是||。解決了我的問題,程序現在繼續如何應對。我確實有另外一個問題,你可以在原始文章中看到編輯的更多細節 – Blackbinary 2010-02-05 15:40:06

+0

oops double post – Blackbinary 2010-02-05 15:41:10

+0

爲什麼轉換爲'int'? – 2010-02-05 22:34:56

0

它可能會更好,只是比較反對你考慮空白的特定字符,也使用& &:

if ((character != ' ') && 
    (character != '\t')) 
+0

是的,我知道這是一個有效的方法。我實際上以另一種方式嘗試了這一點。但不管我如何告訴它以避免字符是空格或製表符,它不會。 – Blackbinary 2010-02-05 15:35:40

+0

@Blackbinary:因爲你正在檢查錯誤的東西:你可以這樣做:'if(c!=''&& c!='\ t')'等等,它會起作用。 – 2010-02-05 15:38:27

+0

我同意Alok,我沒有考慮代碼,但每個角色總是會變成!=''或!='\ t'。我會更新我的代碼,沒有發現問題 – 2010-02-05 15:52:52

8

你不應該依賴於實際的號碼字符:那取決於你的編碼平臺使用,並且可能不是ASCII。您可以通過簡單的測試來檢查任何特定的字符。例如,爲了測試是否是c空格字符:

if (c == ' ') 

會工作,更容易閱讀,並且是便攜式的。

如果你想跳過所有空白,你應該使用#include <ctype.h>,然後使用isspace()

if (isspace((unsigned char)c)) 

編輯:正如有人說,你的病情檢查「沒有空間」是錯誤的,但上述觀點仍然適用。所以,你的情況可以換成:

if (!isspace((unsigned char)c)) 
+0

我認爲更多的代碼可能是必要的。堅持下去,我會嘗試一些建議的東西(主要是&&而不是||) – Blackbinary 2010-02-05 15:37:55

+0

@Blackbinary:請參閱我的編輯:你可能不需要更多的代碼,但你應該用'if( !isspace(...))'無論如何。 – 2010-02-05 15:39:34

+0

爲使用適當的圖書館! – rampion 2010-02-05 19:07:29