2012-04-14 483 views
0

我正在讀取一個文件,並將數組(指針)的前端傳回到我的主函數中。我遇到的問題是它沒有複製單詞之間的空格。例如Hello Hello作爲HelloHello出現。從C++中用空格讀取文件

我開始使用getLine來代替,並遇到了文件大小的問題。我將它設置爲500,因爲沒有文件將大於500,但大多數文件將低於500,我正在嘗試獲取文件的確切大小。

這裏是我的代碼:

char infile() 
{ 
    const int SIZE=500; 
    char input[SIZE]; 
    char fromFile; 
    int i=0; 

    ifstream readFile; 
    readFile .open("text.txt"); 
    while(readFile>>fromFile) 
    { 
    input[i]=fromFile; 
    i++; 
    } 
    cout<<endl; 
    returnArray=new char[i];//memory leak need to solve later 
    for(int j=0;j<i;j++) 
    { 
     returnArray[j]=input[j]; 
     cout<<returnArray[j]; 
    } 
    cout<<endl; 
    } 
    return returnArray[0]; 
} 
+0

它需要返回到焦炭的主要功能 – Aaron 2012-04-14 22:09:42

+1

你的代碼有什麼可怕的壓痕... – Griwes 2012-04-14 22:22:13

回答

5

根據您的文件格式是什麼,你可能要使用ifstream::read()ifstream::getline()代替。

operator >>將嘗試在數據流正在讀取時使用空格作爲標記之間的分隔符來「標記化」或「解析」數據流。您有興趣從文件中獲取原始數據並保留空白,因此您應該避免使用它。如果要一次讀取一行數據,使用換行符作爲分隔符,則應使用getline()。否則使用read()

0

您正在要求它在分隔哪裏有空格時進行閱讀。

您可以使用getline()來保留空白。

3

使用std::string,std::vectorstd::getline,您仍然可以返回char。這將解決你的內存泄漏和跳過空白問題。

例子:

char infile() 
{ 
    std::ifstream readFile("text.txt"); 
    std::vector<std::string> v; 
    std::string line; 
    while(std::getline(readFile, line)) 
    { 
    v.push_back(line); 
    }          
    for(auto& s : v) 
    { 
     std::cout << s << std::endl; 
    } 
    return (v[0])[0]; 
}