私はすでにこれを知っているはずですが...printf
そのままですか? 例を挙げてください。sprintf
cout
____
3255 次
5 に答える
13
を探しているようですねstd::ostringstream
。
もちろん、C++ ストリームは、C のprintf()
-type 関数のようなフォーマット指定子を使用しません。彼らは使用しますmanipulators
。
要求に応じた例:
#include <sstream>
#include <iomanip>
#include <cassert>
std::string stringify(double x, size_t precision)
{
std::ostringstream o;
o << std::fixed << std::setprecision(precision) << x;
return o.str();
}
int main()
{
assert(stringify(42.0, 6) == "42.000000");
return 0;
}
于 2011-05-06T23:55:17.667 に答える
1
std::ostringstream
これを使用して、Boost レキシカル キャストのようなものを作成できます。
#include <sstream>
#include <string>
template <typename T>
std::string ToString( const T & t ) {
std::ostringstream os;
os << t;
return os.str();
}
使用中で:
string is = ToString( 42 ); // is contains "42"
string fs = ToString( 1.23 ) ; // fs contains something approximating "1.23"
于 2011-05-06T23:49:06.640 に答える
1
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
ostringstream s;
s.precision(3);
s << "pi = " << fixed << 3.141592;
cout << s.str() << endl;
return 0;
}
出力:
pi = 3.142
于 2011-05-07T00:00:04.230 に答える
1
次に例を示します。
#include <sstream>
int main()
{
std::stringstream sout;
sout << "Hello " << 10 << "\n";
const std::string s = sout.str();
std::cout << s;
return 0;
}
再利用のためにストリームをクリアしたい場合は、次のことができます
sout.str(std::string());
Boost Formatライブラリも参照してください。
于 2011-05-07T00:08:37.707 に答える
-1
あなたは、cout の概念について少し誤解しています。cout はストリームであり、演算子 << は任意のストリームに対して定義されています。したがって、データを出力するには、文字列に書き込む別のストリームが必要です。std::ostringstream のような標準ストリームを使用するか、独自のストリームを定義できます。
cout は printf や sprintf のような関数ではないため、類推はあまり正確ではありません
于 2011-05-06T23:51:27.007 に答える