2013-04-14 62 views
2

我的文件是这样的:C++读取字符串用空格

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(); 

问题是名字,那个城市只读到下一个空间,所以从纽约它只读取新的。 我应该如何以一种简单而智能的方式阅读整行的其余部分?

+0

你应该让城市成为'std :: string'。 – Rapptz

回答

2

你的文件的格式似乎暗示着这个城市的名字在一行,不是空间年底结束。

您可以阅读使用getline

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

谢谢你的回应,也不应该在同一时间内变更吗? – Simon

+0

@Simon YES!感谢您的支持。请注意,我也简化了代码。一个'istream'可以单独在[bool上下文]中使用(http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool) –

+0

谢谢,我是否还需要更改char city [100]串联城市; ? – Simon

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

使用函数getline(F,市)城市这种形式。所以,你有f >> x >> y; getline(f,city);

1

该代码读取空格并正确处理文件结尾。其他的答案中没有做到这一点,我认为

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

关于如何正确测试文件的末尾更多信息,请参阅this

当然,您应该像其他人所说的那样,使用std::string这种简单的方式来做事。