Привести строковый объект к istringstream

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>

void reverse_words(const std::string &file) {
    std::ifstream inFile { file };
    std::vector<std::string> lines;
    if(static_cast<bool>(inFile)) {
        std::string line;
        while(std::getline(inFile, line, '\n')) {
                lines.push_back(line);
        }

    std::vector<std::string> reverse_line;
    std::string word;
    for(auto line: lines) {
        while(std::getline(line, word, ' '))
            reverse_line.push_back(word);

    }

    }
}

int main(int argc, char ** argv) {
    if(argc == 2) {
        reverse_words(argv[1]);
    }
}

В последнем цикле for моей программы я хотел бы прочитать слово из строки, строка представляет собой строку, поэтому это не соответствует определению функции getline(). Как я могу преобразовать строку в строковый поток, чтобы использовать ее для чтения так же, как файл?

Пожалуйста, игнорируйте логику программы на данный момент, она не завершена, мой вопрос специфичен для C++.


person Gabriella Lenzi    schedule 14.03.2016    source источник
comment
Примечание: вам не нужен if(static_cast<bool>(inFile)), используйте if(inFile)   -  person    schedule 14.03.2016
comment
Вам не нужно писать if (static_cast<bool>(inFile)) {. InFile контекстуально преобразуется в bool, поэтому вы можете просто написать if (inFile) {   -  person Barry    schedule 14.03.2016
comment
@DieterLücking, лол, 10 секунд   -  person Barry    schedule 14.03.2016
comment
Слишком много удобства (приведения) портит программирование!   -  person    schedule 14.03.2016
comment
Дополнительное примечание: вам не нужны if(static_cast<bool>(inFile)) или if(inFile). Если файл не открылся, вызов getline завершится ошибкой, а lines будет пустым.   -  person Pete Becker    schedule 15.03.2016


Ответы (1)


Вам просто нужно создать istringstream:

for(auto const& line: lines) {
    std::istringstream iss{line};  // <-------
    while(std::getline(iss, word, ' ')) {
        reverse_line.push_back(word);
    }
}    
person Barry    schedule 14.03.2016