2011-08-05 33 views
3

我試圖讀取帶有標題和作者列表的文件,而且我需要能夠忽略文件中每行分隔的換行符。如何在列表格式中讀取文件時忽略換行符

例如,我的txt文件可能有這樣的名單:

自私的基因

道金斯

美麗新世界

赫胥黎

太陽也升起

海明威

我不得不使用並行陣列來存儲這些信息,然後就可以對數據進行格式化,像這樣:

自私的基因(道金斯)

我試着使用函數getline讀取數據,但是當我去格式化標題和作者,我得到這個:

自私的基因

(道金斯

如何忽略換行符,當我從文件列表讀取?

這是我到目前爲止有:

int loadData(string pathname) 
    { 
    string bookTitle[100]; 
    string bookAuthor[100]; 
    ifstream inFile; 
    int count = -1; //count number of books 
    int i; //for variable 

    inFile.open(pathname.c_str()); 
    { 
     for (i = 0; i < 100; i++) 
     { 
      if(inFile) 
      { 
       getline(inFile, bookTitle[i]); 
       getline(inFile, bookAuthor[i]); 
       count++; 
      } 
     } 
     inFile.close(); 
     return count; 
    } 

我非常感謝任何幫助!

理查德

編輯:

這是我的輸出功能:

void showall(int count) 
    { 
     int j; //access array up until the amount of books 
     for(j = 0; j < count; j++) 
     { 
      cout << bookTitle[j] << " (" << bookAuthor[j] << ")"; 
      cout << endl; 
     }  
    } 

我在這裏幹什麼什麼了嗎?

+1

'getline'應該去掉換行符。也許你在UNIX機器上使用DOS文件,並且回車符正在滑入並被解釋爲換行符? – Potatoswatter

+0

如果調用'std :: getline'失敗,則此代碼行爲不佳。僅供參考。 –

+0

查看http://stackoverflow.com/questions/1581539/how-to-identify-a-new-line-in-c –

回答

2

正如@Potatoswatter所說,std::getline通常會去掉換行符。如果換行符仍然可以通過,那麼您可能正在使用一個使用\n作爲換行符的系統,但是您的文件有\r\n換行符。

只需在添加到字符串後刪除多餘的換行符。你可以這樣做:

s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::isspace)).base(), s.end()); 

或類似的。你會發現std::find_if<algorithm>,std::isspace<clocale>std::not1<functional>

0

我知道了!問題是我正在閱讀的文件。我複製並粘貼文件的標題和作者從我的教練給我們一個新的.txt文件的.txt,現在它工作正常,我有它!謝謝大家的幫助!

相關問題