2013-04-14 61 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這種簡單的方式來做事。