Quiero tener la entrada cin read de una cadena.Redirigir cin a una cadena
¿Hay alguna manera de hacerlo?
Algo como esto:
const char * s = "123 ab";
cin.readFrom(s);//<---- I want something like this
int i;
cin>>i;
cout<<i; //123
Quiero tener la entrada cin read de una cadena.Redirigir cin a una cadena
¿Hay alguna manera de hacerlo?
Algo como esto:
const char * s = "123 ab";
cin.readFrom(s);//<---- I want something like this
int i;
cin>>i;
cout<<i; //123
De esta manera:
#include <sstream>
#include <iostream>
std::istringstream stream("Some string 123");
streambuf* cin_backup = std::cin.rdbuf(stream.rdbuf());
Es posible que desee hacer copia de seguridad de la rdbuf original de std :: cin , si quieres usarlo de nuevo
Pruebe algo como:
stringbuf s = string("123 ab");
cin.rdbuf(&s);
Recomendaría usar una secuencia de secuencia. Puede usar los operadores de E/S sobrecargados como lo haría con entrada estándar/salida estándar. Algo como esto:
string tempString = "123 ab";
int firstArg;
string secondArg;
stringstream stream(tempString);
stream >> firstArg >> secondArg;
cout << firstArg << " " << secondArg;
yo personalmente considero que esto sea un poco más claro que la lectura de una serie de estándar y luego usando el estándar de de los operadores de E/S, pero tal vez hay una razón por la que quiere leerlo a la norma en primero que no me doy cuenta.
Espero que esto ayude!
En C++ 17, la solución de Ben Voigt no se compilará a menos que use basic_stringbuf
. En lugar de utilizar la siguiente:
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);
Si desea utilizar una matriz de caracteres en lugar de un std: cadena que podría utilizar cin.getline (s, n); Donde n es el "número de caracteres para almacenar (incluido el carácter nulo de terminación)". Ver http://www.cplusplus.com/reference/iostream/istream/getline/. También hay una línea getline para std :: string, consulte http://www.cplusplus.com/reference/string/getline/ – anno
@anno: lea 'cin' ** de ** una cadena, no de' cin' en una cuerda. –