C ++读取带空格的字符串

时间:2013-04-14 18:37:40

标签: c++ istream

我的文件是这样的:

59 137 New York
137 362 Syracuse
216 131 New Jersey
...
..
.

我想把它读成一个结构: X - Y - 城市名称

  char city[100];
  int x , y;
  f.open("map.txt");
  f >> x >> y >> city;
  while (!f.fail()) {
    f >> x >> y >> city;
  }
  f.close();

问题是,那个城市只读到下一个空间,所以从纽约它只读新。 我应该如何以一种简单而聪明的方式阅读整条线路?

4 个答案:

答案 0 :(得分:3)

您可以这样做:

  f.open("map.txt");
  string city;
  int x , y;
  f >> x >> y;
  getline(f,city);

  while (!f.fail()) {
  f >> x >> y;
  getline(f,city);
  }
  f.close();

答案 1 :(得分:3)

您的文件格式似乎暗示城市的名称在行的结尾处结束,而不是空间

您可以使用getline

阅读该表单
  char city[100];
  int x , y;
  f.open("map.txt");
  while ( f ) {
      f >> x >> y;         
      f.getline(city, 100); 
  }
  f.close();

答案 2 :(得分:1)

对城市使用getline(f,city)。所以,你有f>> x>> Ÿ; getline(f,city);

答案 3 :(得分:1)

此代码读取空格并正确处理文件末尾。我认为没有其他答案可以做到这一点

while ((f >> x >> y).getline(city, 100))
{
}

有关如何正确测试文件结尾的详细信息,请参阅this

当然,你应该像其他人所说的那样使用std::string轻松做事。