将字符串对象转换为istringstream

3
#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()函数的定义不匹配。我该如何将该行强制转换为stringstream,以便像读取文件一样使用它?请忽略目前程序的逻辑,它还没有完成,我的问题是特定于C++的。

附注:您不需要使用 if(static_cast<bool>(inFile)),可以直接使用 if(inFile) - user2249683
你不必写成 if (static_cast<bool>(inFile)) {InFile 在上下文中可以转换为 bool,所以你只需写成 if (inFile) { - Barry
@DieterLücking 哈哈,10秒钟。 - Barry
过多的便利(强制转换)会破坏编程! - user2249683
进一步的注意事项:您不需要使用if(static_cast<bool>(inFile))if(inFile)。如果文件未打开,则对getline的调用将失败,并且lines将为空。 - Pete Becker
2个回答

2
你只需要构造一个istringstream
for(auto const& line: lines) {
    std::istringstream iss{line};  // <-------
    while(std::getline(iss, word, ' ')) {
        reverse_line.push_back(word);
    }
}    

2
std::string s("hello world");
std::istringstream ss(s);
std::string s1, s2;
ss >> s1 >> s2;
std::cout << s1 << std::endl;
std::cout << s2 << std::endl;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接