2010-09-17 79 views
0

我不得不閱讀文本文件;然而,一個特定的文本文件給我的問題。文本文件不僅很大(整個電子書),而且還有幾個重音字母。我正在閱讀適當的標點符號或空格停止使用一個字母的文字。我通過測試字母和標點符號(如撇號)的適當ASCII來做到這一點。有沒有一種方法可以讀取重音字母,但將它們與其他字母分開?我需要添加任何隨機庫嗎?C++中的文本文件輸入問題

這裏是我的代碼獲得了這個詞:

string GetNextWord(){ 
string w="";       // used to store each word temporarly 
    char c;         // used for each individual character 
    int i=0;        // a counter 
input.get(c);       // gets first character 
c=tolower(c);       // forces c to lowercase 

while(c>=97 && c<=122 || c==39){  // loops while the character is a lowercase letter or ' 
    w=w+c;        // adds character to word string 
    input.get(c);      // gets next character 
    c=tolower(c);      // forces c to lowercase 
++i;         // increments counter 
} 
if(i>0)         // if there is a word 
    return w;       // return the word 
else         // otherwise string is NULL 
     return "NOT A WORD!";    // returns a flag to main 
} 

工程上的每個文件,到目前爲止,除了這一個。
您可以在此處看到輸入 - >http://www.gutenberg.org/cache/epub/244/pg244.txt

回答

0

重音的ASCII字符不屬於普通字符集。即127以上。你不清楚它「到目前爲止每個文件上都有效」,但是看上面的內容,如果你正在使用重音字符,我的猜測是你正在進入一個無限循環。要正確處理擴展字符,您需要知道正在處理的代碼頁。我也不確定std::tolower是否能正確處理ASCII中的擴展字符,至少在沒有被告知區域/代碼頁是什麼的情況下。

+0

它適用於帶有數字,標點符號,大小寫字母的文件,到目前爲止重音字母是唯一引起我問題的字母。我同意你的想法,即將進入無限循環。使用namespace std; – 2010-09-17 03:55:16

+0

這對你有幫助嗎? – 2010-09-17 03:57:17

+0

有很多方法來表示重音字母。最有可能的是你看到latin1編碼,這意味着你應該添加'|| (c> = 161 && c <= 255)'到while測試 – MattSmith 2010-09-17 04:18:40