有没有办法在 C++ 中将输入字符串转换为输入流?

r3k*_*k0j 3 c++ string input stream

我想要做的是从终端获取用户输入,并在程序中的其他函数中使用该输入。由于我的函数仅将输入流作为参数,因此我想将输入字符串转换为输入流。

int main(int argc, char** argv)
{

    std::vector<std::string> args(argv, argv + argc);
    
    if(args.size() == 1){ //if no arguments are passed in the console
        std::string from_console;
        std::istringstream is;
        std::vector<std::string> input;
        while(!getline(std::cin,from_console).eof()){
            input.emplace_back(from_console);
        }
        for(std::string str : input){
            std::cout << "\n" << str;
        }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试这段代码时出现的另一个问题是,当我用一堆字符而不是新行结束控制台输入时(按 Enter 键然后按 ctrl+d),该行被忽略并且没有打印出来。示例:当我输入以下内容时:

aaa bbb
ccc ctrl+d
Run Code Online (Sandbox Code Playgroud)

我只得到第一行(aaa bbb) 而没有打印出ccc。但:

aaa bbb
ccc
ctrl+d 
Run Code Online (Sandbox Code Playgroud)

也打印出 ccc,但它会忽略新行。那么为什么会发生这种情况呢?

eer*_*ika 5

有没有办法在 C++ 中将输入字符串转换为输入流?

对的,这是可能的。这就是std::istringstream目的。例子:

std::string input = some_input;
std::istringstream istream(input); // this is an input stream
Run Code Online (Sandbox Code Playgroud)