Я хочу, чтобы cin читал ввод строки.Перенаправить cin в строку
Есть ли способ заставить это сделать это?
Что-то вроде этого:
const char * s = "123 ab";
cin.readFrom(s);//<---- I want something like this
int i;
cin>>i;
cout<<i; //123
Я хочу, чтобы cin читал ввод строки.Перенаправить cin в строку
Есть ли способ заставить это сделать это?
Что-то вроде этого:
const char * s = "123 ab";
cin.readFrom(s);//<---- I want something like this
int i;
cin>>i;
cout<<i; //123
Как это:
#include <sstream>
#include <iostream>
std::istringstream stream("Some string 123");
streambuf* cin_backup = std::cin.rdbuf(stream.rdbuf());
Вы можете создать резервную копию оригинального rdbuf из станд :: CIN , если вы хотите использовать его снова.
Попробуйте что-то вроде:
stringbuf s = string("123 ab");
cin.rdbuf(&s);
Я бы рекомендовал использовать струнный поток. Вы можете использовать перегруженные операторы ввода-вывода, как и со стандартным/стандартным выходом. Что-то вроде этого:
string tempString = "123 ab";
int firstArg;
string secondArg;
stringstream stream(tempString);
stream >> firstArg >> secondArg;
cout << firstArg << " " << secondArg;
Я лично считаю, что это будет немного более ясно, чем чтение в строке до стандарта, а затем с помощью стандартного в операторах ввода/вывода, но может быть, есть причина, по которой вы хотите прочитать к стандарту в первую очередь, что я не понимаю.
Надеюсь, это поможет!
В 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);
Если вы хотите использовать массив символов вместо строки 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
@anno: прочитайте 'cin' ** from ** строку, а не' cin' в строка. –