2011-02-07 31 views
9

Tôi muốn có đầu vào đọc cin từ một chuỗi.Chuyển hướng cin tới một chuỗi

Có cách nào để thực hiện việc này không?

Something như thế này:

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

int i; 
cin>>i; 

cout<<i; //123 
+0

Nếu bạn muốn sử dụng mảng char thay vì chuỗi std: bạn có thể sử dụng cin.getline (s, n); Trong đó n là "số ký tự cần lưu trữ (bao gồm ký tự null kết thúc)". Xem http://www.cplusplus.com/reference/iostream/istream/getline/. Ngoài ra còn có một getline cho std :: string, xem http://www.cplusplus.com/reference/string/getline/ – anno

+0

@anno: Đọc 'cin' ** từ ** một chuỗi, không phải từ' cin' vào một chuỗi. –

Trả lời

5

Như thế này:

#include <sstream> 
#include <iostream> 

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

Bạn có thể muốn sao lưu các rdbuf ban đầu của std :: cin , nếu bạn muốn sử dụng lại.

1

Hãy thử một cái gì đó như:

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

Tôi khuyên bạn nên sử dụng luồng chuỗi. Bạn có thể sử dụng các toán tử I/O quá tải như bạn muốn với tiêu chuẩn trong/ra tiêu chuẩn. Một cái gì đó như thế này:

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

stringstream stream(tempString); 

stream >> firstArg >> secondArg; 

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

Cá nhân tôi sẽ tìm thấy điều này là rõ ràng hơn một chút so với đọc sách trong một chuỗi để tiêu chuẩn trong và sau đó sử dụng tiêu chuẩn trong của tôi khai thác/O, nhưng có lẽ có một lý do bạn muốn đọc nó với tiêu chuẩn đầu tiên mà tôi không nhận ra.

Hy vọng điều này sẽ hữu ích!

0

Trong giải pháp C++ 17, Ben Voigt sẽ không biên dịch trừ khi bạn sử dụng basic_stringbuf. Thay vào đó, hãy sử dụng mẫu bên dưới:

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); 
Các vấn đề liên quan