从C ++中带空格的文件中读取

时间:2012-04-14 22:03:47

标签: c++ arrays ifstream

我正在读取一个文件并将数组的前面(指针)传回我的main函数。我遇到的问题是它没有复制单词之间的空格。例如,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];
}

3 个答案:

答案 0 :(得分:5)

根据您的文件格式,您可能希望改为使用ifstream::read()ifstream::getline()

operator >>将尝试在数据流被读取时“标记”或“解析”数据流,使用空格作为标记之间的分隔符。您有兴趣从原始数据中获取原始数据,因此您应该避免使用它。如果要一次读取一行数据,使用换行符作为分隔符,则应使用getline()。否则使用read()

答案 1 :(得分:3)

使用std::stringstd::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];
}

答案 2 :(得分:0)

在分隔有空格的地方时,你要求它阅读。

您可以使用getline()来保留空格。