2011-02-07 18 views
9

文字列からcin読み込み入力が必要です。cinを文字列にリダイレクト

これを行う方法はありますか?

このような何か:

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

int i; 
cin>>i; 

cout<<i; //123 
+0

std:stringの代わりにchar配列を使用する場合は、cin.getline(s、n);を使用できます。ここで、nは「格納する文字数(終了ヌル文字を含む)」です。 http://www.cplusplus.com/reference/iostream/istream/getline/を参照してください。 std :: stringのgetlineもあります。http://www.cplusplus.com/reference/string/getline/を参照してください。 – anno

+0

@anno: 'cin'から' cin'ではなく 'cin''を**から読み込みます。文字列。 –

答えて

5

:あなたはSTDの元RDBUFをバックアップすることをお勧めします

#include <sstream> 
#include <iostream> 

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

を:: CINあなたがもう一度それを使いたいのならば。

1

ような何か試してみてください。このよう

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

文字列ストリームの使用をお勧めします。標準のin/standard outのように、オーバーロードされたI/O演算子を使用できます。このような何か:

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

stringstream stream(tempString); 

stream >> firstArg >> secondArg; 

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

私は個人的にI/O演算子を内標準に文字列を読み込み、その後の標準を使用するよりも、もう少し明確にするためにこれを見つけるだろうが、多分あなたはそれを読みたいと思う理由があります私が気づいていないことを最初に標準にしています。

希望すると便利です。

0

を使用しない限り、Ben Voigtのソリューションはコンパイルされません。代わりに以下のものを使用してください:

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); 
関連する問題