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

Read from a file with blank spaces in C++

本文关键字:文件 读取 空格 C++      更新时间:2023-10-16

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

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

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

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

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

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