2016-09-24 94 views
1

我有一個文件,其中包含整理成行,並用空格分隔。行數和長度都是未知的。如何遍歷文件中的一行?

我目前正在逐行遍歷文件,並且我試圖遍歷每行字符,但我遇到了一些麻煩。我目前正在將每行的內容存儲爲一個字符串,但我懷疑這不是最好的方式,我希望有人能指出我正確的方向。

這裏是我當前的代碼,簡單的打印文件中的每一行:

std::string filename = "values.txt"; 
std::ifstream file(filename.c_str()); 
std::string line; 

while (std::getline(file, line)) 
{ 
    std::cout << line << std::endl; 
} 

我從蟒蛇來了,這很容易實現這一點,就像這樣:

for line in file: 
    for char in line: 
     print char 

然而,不因爲我對C++相當陌生,知道for循環的行數/長度會讓我失望。我還想讀取字符作爲整數,而不是字符串,但我還沒有能夠找出那一個。什麼是在C++中實現這個最正確的方法?

任何幫助,非常感謝。

+0

你檢查了[這裏](http://stackoverflow.com/questions/20710172/looping-through-every-character-in-user-input)和[這裏](http://stackoverflow.com/questions/9438209 /換每個字符,在字符串)? – TigerhawkT3

+0

我不明白你的問題是什麼?當你展示它時,用'std :: getline()'讀取行是完美的。 –

+0

你可以使用[這個答案](http://stackoverflow.com/questions/236129/split-a-string-in-c/236803#236803)到以前的帖子,會告訴你如何可以拆分你的字符串從每一行獲得,然後你可以對單個字符串進行操作(將它們轉換爲整數,雙精度等...) – Jvinniec

回答

2

你幾乎在那裏;您可以使用格式的流提取讀取整數,使用一個字符串流來表示每一行:

#include <fstream> 
#include <sstream> 
#include <string> 

// ... 

for (std::string line; std::getline(infile, line);) 
{ 
    std::istringstream iss(line); 
    for (int n; iss >> n;) 
    { 
     std::cout << "Have number: " << n << "\n"; 
    } 
    std::cout << "End of line\n"; 
} 

錯誤檢查可以通過檢查整個字符串流是否已經使用了添加。

+0

[Demo](https://ideone.com/tlLuBd) –

+0

這正是我所需要的!萬分感謝。 – Grav