【问题标题】:Redirect cin to a string将 cin 重定向到字符串
【发布时间】:2011-06-22 22:44:33
【问题描述】:

我想让 cin 从字符串中读取输入。

有没有办法让它这样做?

类似这样的:

const char * s = "123 ab";
cin.readFrom(s);//<---- I want something like this

int i;
cin>>i;

cout<<i; //123

【问题讨论】:

标签: c++ iostream


【解决方案1】:

像这样:

#include <sstream>
#include <iostream>

std::istringstream stream("Some string 123");
streambuf* cin_backup = std::cin.rdbuf(stream.rdbuf());

如果您想再次使用它,您可能需要备份 std::cin 的原始 rdbuf。

【讨论】:

    【解决方案2】:

    我建议使用字符串流。您可以像使用标准输入/标准输出一样使用重载 I/O 运算符。像这样的:

    string tempString = "123 ab";
    int firstArg;
    string secondArg;
    
    stringstream stream(tempString);
    
    stream >> firstArg >> secondArg;
    
    cout << firstArg << " " << secondArg;
    

    我个人认为这比将字符串读入标准输入然后使用标准输入的 I/O 运算符更清楚一些,但也许有一个原因,您想先将其读入标准,而我不这样做'没意识到。

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      尝试类似:

      stringbuf s = string("123 ab");
      cin.rdbuf(&s);
      

      【讨论】:

        【解决方案4】:

        在 C++17 中,Ben Voigt 的解决方案不会编译,除非您使用 basic_stringbuf。而是使用下面的一个:

          stringbuf s;
          const char *userInput = "10 1 2 3 4 5 6 7 8 9 10 3 7";         
          s.sputn(userInput, strlen(userInput)); 
          cin.rdbuf(&s);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-22
          • 2011-04-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多