2011-02-07 2 views
9

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

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

Что-то вроде этого:

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

int i; 
cin>>i; 

cout<<i; //123 
+0

Если вы хотите использовать массив символов вместо строки std: вы можете использовать cin.getline (s, n); Где n - «количество символов для хранения (включая конечный нулевой символ)». См. Http://www.cplusplus.com/reference/iostream/istream/getline/. Также существует строка getline для std :: string, см. Http://www.cplusplus.com/reference/string/getline/ – anno

+0

@anno: прочитайте 'cin' ** from ** строку, а не' cin' в строка. –

ответ

5

Как это:

#include <sstream> 
#include <iostream> 

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

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

1

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

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

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

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

stringstream stream(tempString); 

stream >> firstArg >> secondArg; 

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

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

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

0

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