2016-09-24 9 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; 
} 

私は簡単のようなので、これを実装する可能性がある、のpythonから来ている:

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

しかし、ではありませんforループの長さ/行数を知っていると、私はかなり新しいC++になってしまいます。私は文字列の代わりに文字列をint型としても読んでみたいですが、私はそれを理解することができませんでした。これをC++で実装する最も正しい方法は何でしょうか?

ご協力いただきまして誠にありがとうございます。

+0

[ここ](http://stackoverflow.com/questions/20710172/looping-through-every-character-in-user-input)と[ここ](http://stackoverflow.com/questions)にチェックしましたか?/9438209/for-every-character-in-string)? – TigerhawkT3

+0

あなたの問題は実際には分かりません。 'std :: getline()'で行を読むと完璧です。 –

+0

前の投稿に[この回答](http://stackoverflow.com/questions/236129/split-a-string-in-c/236803#236803)を使用すると、文字列を分割する方法がわかります各行から取得し、個々の文字列を操作することができます(int、doubleなどに変換してください) – 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

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

+0

これは私が必要としていたものです。ありがとう、トン。 – Grav

関連する問題