2011-02-07 10 views
9

पर सीआई को रीडायरेक्ट करें, मैं एक स्ट्रिंग से इनपुट पढ़ना चाहता हूं।एक स्ट्रिंग

क्या ऐसा करने का कोई तरीका है?

कुछ इस तरह:

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

int i; 
cin>>i; 

cout<<i; //123 
+0

यदि आप std: string के बजाय char array का उपयोग करना चाहते हैं तो आप cin.getline (s, n) का उपयोग कर सकते हैं; जहां एन "स्टोर करने के लिए वर्णों की संख्या है (समापन शून्य वर्ण सहित)"। Http://www.cplusplus.com/reference/iostream/istream/getline/ देखें। Std :: स्ट्रिंग के लिए एक गेटलाइन भी है, http://www.cplusplus.com/reference/string/getline/ – anno

+0

@anno देखें: ** cin' से 'cin' ** पढ़ें,' cin' से नहीं ' स्ट्रिंग। –

उत्तर

5
इस तरह

:

#include <sstream> 
#include <iostream> 

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

आप std :: CIN के मूल rdbuf बैकअप लेने के लिए चाहते हो सकता है , यदि आप इसे फिर से उपयोग करना चाहते हैं।

1
कुछ

प्रयास करें की तरह:

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

मैं एक स्ट्रिंग स्ट्रीम का उपयोग करने की सलाह दूंगा। आप अधिभारित I/O ऑपरेटरों का उपयोग कर सकते हैं जैसे आप मानक/मानक आउट के साथ करेंगे। कुछ इस तरह:

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

stringstream stream(tempString); 

stream >> firstArg >> secondArg; 

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

मैं व्यक्तिगत रूप में मानक के लिए एक स्ट्रिंग में पढ़ने और फिर में के मानक का उपयोग कर आई/ओ ऑपरेटरों की तुलना में थोड़ा अधिक स्पष्ट होना इस मिलेगा, लेकिन शायद वहाँ एक कारण है कि आप इसे पढ़ने के लिए चाहते हैं पहले मानक में कि मुझे एहसास नहीं है।

आशा है कि इससे मदद मिलती है!

0

सी ++ 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);