Перенаправить cin на строку - PullRequest
       4

Перенаправить cin на строку

9 голосов
/ 07 февраля 2011

Я хочу, чтобы cin считывал входные данные из строки.

Есть ли способ заставить это сделать это?

Примерно так:

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

int i;
cin>>i;

cout<<i; //123

Ответы [ 4 ]

5 голосов
/ 07 февраля 2011

Вот так:

#include <sstream>
#include <iostream>

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

Возможно, вы захотите сделать резервную копию исходного rdbuf из std :: cin, если хотите использовать его снова.

5 голосов
/ 07 февраля 2011

Я бы порекомендовал использовать поток строк. Вы можете использовать перегруженные операторы ввода / вывода, как если бы вы использовали стандартный вход / выход. Примерно так:

string tempString = "123 ab";
int firstArg;
string secondArg;

stringstream stream(tempString);

stream >> firstArg >> secondArg;

cout << firstArg << " " << secondArg;

Лично я нахожу, что это немного более понятно, чем чтение строки в стандартный ввод и последующее использование стандартных операторов ввода / вывода, но, может быть, есть причина, по которой вы хотите сначала прочитать это стандартное, что я т осознать.

Надеюсь, это поможет!

1 голос
/ 07 февраля 2011

Попробуйте что-то вроде:

stringbuf s = string("123 ab");
cin.rdbuf(&s);
0 голосов
/ 18 октября 2017

В 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);
...