0

ファイルから読み取り、配列の前部 (ポインター) をメイン関数に戻しています。私が抱えている問題は、単語間の空白をコピーしていないことです。たとえば、 としてHello Hello出てきますHelloHello

代わりに使用して開始し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];
}
4

3 に答える 3

5

ファイル形式によっては、代わりにifstream::read()orを使用することもできます。ifstream::getline()

operator >>トークン間の区切り文字として空白を使用して、データ ストリームの読み取り時に「トークン化」または「解析」を試みます。空白をそのままにしてファイルから生データを取得することに関心があるため、使用を避ける必要があります。一度に 1 行ずつデータを読み取りたい場合は、改行をセパレータとして使用する必要がありますgetline()。それ以外の場合は を使用しますread()

于 2012-04-14T22:08:39.100 に答える
3

とを使用std::stringしても、を返すことができます。これにより、メモリリークと空白のスキップの問題が解決されます。std::vectorstd::getlinechar

例:

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];
}
于 2012-04-14T22:18:39.747 に答える
0

空白がある場所を区切りながら読み取るように求めています。

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

于 2012-04-14T22:09:58.613 に答える