istringstream - how to do this?

前端 未结 3 1393
逝去的感伤
逝去的感伤 2021-02-04 20:33

I have a file:

a 0 0
b 1 1
c 3 4
d 5 6

Using istringstream, I need to get a, then b, then c, etc. But I don\'t know how to do it because there

相关标签:
3条回答
  • 2021-02-04 20:40
    ifstream file;
    file.open("file.txt");
    string line;
    
    getline(file,line);
    istringstream iss(line);
    iss >> id;
    
    getline(file,line);
    istringstream iss2(line);
    iss2 >> id;
    
    getline(file,line);
    iss.str(line);
    iss >> id;
    

    istringstream copies the string that you give it. It can't see changes to line. Either construct a new string stream, or force it to take a new copy of the string.

    0 讨论(0)
  • 2021-02-04 20:50

    You could also do this by having two while loops :-/ .

    while ( getline(file, line))
    {
        istringstream iss(line);
    
        while(iss >> term)
        {
            cout << term<< endl; // typing all the terms
        }
    }
    
    0 讨论(0)
  • 2021-02-04 20:58

    This code snippet extracts the tokens using a single loop.

    #include <iostream>
    #include <fstream>
    #include <sstream>
    
    int main(int argc, char **argv) {
    
        if(argc != 2) {
            return(1);
        }
    
        std::string file = argv[1];
        std::ifstream fin(file.c_str());
    
        char i;
        int j, k;
        std::string line;
        std::istringstream iss;
        while (std::getline(fin, line)) {
            iss.clear();
            iss.str(line);
            iss >> i >> j >> k;
            std::cout << "i=" << i << ",j=" << j << ",k=" << k << std::endl;
        }
        fin.close();
        return(0);
    }
    
    0 讨论(0)
提交回复
热议问题