【问题标题】:Read from a file with blank spaces in C++在 C++ 中从带有空格的文件中读取
【发布时间】:2012-04-14 22:03:47
【问题描述】:

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

【问题讨论】:

  • 需要在main函数中返回一个char
  • 你在那个代码中得到了多么可怕的缩进......

标签: c++ arrays ifstream


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您要求它在分隔有空格的位置时读取。

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

      【讨论】:

        猜你喜欢
        • 2020-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-04
        • 2013-02-28
        相关资源
        最近更新 更多