istringstream - как это сделать? - PullRequest
4 голосов
/ 24 февраля 2010

У меня есть файл:

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

Используя istringstream, мне нужно получить a, затем b, затем c и т. Д. Но я не знаю, как это сделать, потому что нет хороших примеров в Интернете или в моей книге.

Код пока:

ifstream file;
file.open("file.txt");
string line;

getline(file,line);
istringstream iss(line);
iss >> id;

getline(file,line);
iss >> id;

Это печатает «а» для идентификатора оба раза. Я не знаю, как использовать istringstream, очевидно, и я должен использовать istringstream. Пожалуйста, помогите!

Ответы [ 3 ]

6 голосов
/ 24 февраля 2010
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 копирует указанную вами строку. Он не видит изменений в line. Либо создайте новый поток строк, либо заставьте его принять новую копию строки.

3 голосов
/ 20 октября 2013

Вы также можете сделать это, имея два цикла while: - /.

while ( getline(file, line))
{
    istringstream iss(line);

    while(iss >> term)
    {
        cout << term<< endl; // typing all the terms
    }
}
0 голосов
/ 30 мая 2018

Этот фрагмент кода извлекает токены, используя один цикл.

#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;
    }

    return(0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...