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],我会得到整个数字序列 (42938...3324) 而不仅仅是第一个数字 4。谁能解释为什么会这样?

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每行只存储一个 - 值 - 整行都存储在 v[0] 中。然后你在一个流中写了这个整数,在你的while循环开始处理下一行之前忘记写一个新行。因此,您的输出是一个很大的数字。

#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> >. 第一个将您的号码存储在一行中,而每个字符将单独存储。后一个向量仅存储行数的向量。当您查看 ASCII 表时,转换应该会自行解释charint

于 2012-08-17T22:25:22.190 回答