0
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;

int main()
{
    ifstream inFile("test.txt");
    string line;

    while(getline(inFile, line))
    {
        istringstream meh(line);
        int n;
        vector<int> v;

        while(meh >> n)
            v.push_back(n);
    }
}

私の test.txt ファイルは次のようになります。

429384
392041
230138
099938
243324

v[0] を印刷しようとすると、最初の数字 4 だけでなく、数字のシーケンス全体 (42938...3324) が返されます。なぜこれが起こっているのか説明できますか?

4

2 に答える 2

1

私があなたを正しく理解しており、各行内の各数字を本当にループしたい場合は、これを試すことができます:

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;

int main()
{   
    ifstream inFile("test.txt");
    string line;

    while(getline(inFile, line))
    {   
        vector<int> v;
        int n;
        // loop through the string
        for(int i = 0; i < line.length(); i++) {
           // check whether the byte is numeric
           if(line[i] >= '0' && line[i] <= '9') {
               // convert it to a real integer
               int n = line[i] - '0';
               v.push_back(n); // add it to the vector
           }   
        }   

        // just to show they have been added
        int j;
        for (vector<int>::size_type j = 0; j < v.size(); ++j) {   
            std::cout << v[j] << std::endl;
        }   
    }   
}

ベクトルvはループのスコープのみを持つため、ファイルの各行には独自のベクトルがあります。ただし、実際のアプリケーションを知らなければ、これはあなたが望むものかもしれません。

于 2012-08-17T22:24:56.323 に答える
1

データを出力するときにおそらく間違いを犯しました。実際、コードintは各行に値を 1 つだけ格納します。行全体が v[0] 内に格納されています。次に、その整数をストリーム内に書き込み、while ループが次の行の処理を開始する前に新しい行を書き込むのを忘れました。したがって、出力は 1 つの大きな数値でした。

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;

int main()
{
    istringstream inFile("text.txt");
    string line;
    vector<vector<int> > vector_container;

    while(getline(inFile, line))
    {
        istringstream meh(line);
        char n;
        vector<int> v;

        while(meh >> n)
            v.push_back(static_cast<int>(n)-48);

        vector_container.push_back(v);
    }
    // this would output your numbers the way they were
    // stored inside your file
    for(int i = 0; i < vector_container.size(); ++i){
        for(int j = 0; j < vector_container[i].size(); ++j){
             cout << vector_container[i][j];
        }
        cout << endl;
    }

}

これは、期待どおりに機能するはずです。の中にvector<int>コンテナがありvector<vector<int> >ます。最初のものはあなたの番号を行に保存しますが、各文字は個別に保存されます. 後者のベクトルは、ラインの数値のベクトルを格納するだけです。charto へのint変換は、ASCII テーブルを見ると説明されているはずです。

于 2012-08-17T22:25:22.190 に答える