2012-04-14 21 views
0

ファイルから読み込み、配列(ポインタ)の前をメイン関数に戻しています。私が抱えている問題は、単語の間に空白をコピーしていないということです。例えば、Hello HelloHelloHelloとなります。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

+1

のcharを返す必要があります... – Griwes

答えて

5

、あなたの代わりにifstream::read()またはifstream::getline()を使用することをお勧めします。

operator >>は、トークン間の区切り文字として空白を使用して、データストリームが読み込まれているときにデータストリームを 'トークン化'または '解析'しようとします。空白を残してファイルから生データを取得することに興味があるので、使用しないでください。区切り文字としてラインフィードを使用して、一度に1行のデータを読み取る場合は、getline()を使用してください。それ以外の場合はread()を使用します。

0

空白がある場所を区切りながら読み上げてください。

getline()を使用して空白を保持できます。

3

std::string,std::vectorおよびstd::getlineを使用しても、を返すことができます。それはあなたのメモリリークを解決し、空白問題をスキップします。

例:

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]; 
} 
関連する問題