2011-02-07 15 views
9

Voglio avere un input di lettura cin da una stringa.Reindirizzare cin a una stringa

C'è un modo per farlo?

Qualcosa di simile a questo:

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

int i; 
cin>>i; 

cout<<i; //123 
+0

Se si desidera utilizzare un array di caratteri anziché una stringa di std: è possibile utilizzare cin.getline (s, n); Dove n è il "numero di caratteri da memorizzare (incluso il carattere null terminante)". Vedi http://www.cplusplus.com/reference/iostream/istream/getline/. C'è anche una getline per std :: string, vedi http://www.cplusplus.com/reference/string/getline/ – anno

+0

@anno: leggi 'cin' ** da ** una stringa, non da' cin' in un stringa. –

risposta

5

Ti piace questa:

#include <sstream> 
#include <iostream> 

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

si potrebbe desiderare di eseguire il backup del rdbuf originale di std :: cin , se vuoi usarlo di nuovo.

1

Prova qualcosa di simile:

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

Si consiglia di utilizzare un flusso di stringhe. Puoi usare gli operatori I/O sovraccarichi come faresti con standard in/standard out. Qualcosa di simile a questo:

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

stringstream stream(tempString); 

stream >> firstArg >> secondArg; 

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

Io personalmente trovo ad essere un po 'più chiaro di lettura in una stringa standard e quindi utilizzando standard di operatori di I/O, ma forse c'è una ragione che si desidera leggere in primo luogo in standard che non realizzo.

Spero che questo aiuti!

0

In C++ 17, la soluzione di Ben Voigt non verrà compilata se non si utilizza basic_stringbuf. Utilizzare invece quello seguente:

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); 
Problemi correlati