输出到字符串的 cout 相当于什么?

发布于 2024-11-05 18:05:08 字数 129 浏览 2 评论 0 原文

我应该已经知道这一点了,但是... printfsprintf 之间的关系就像 cout____ 之间的关系一样吗?请举个例子。

I should know this already but... printf is to sprintf as cout is to ____? Please give an example.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

九八野马 2024-11-12 18:05:08

听起来您正在寻找 std::ostringstream

当然,C++ 流不使用像 C 的 printf() 类型函数那样的格式说明符;他们使用操纵器

根据要求,示例:

#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;
}

It sounds like you are looking for std::ostringstream.

Of course C++ streams don't use format-specifiers like C's printf()-type functions; they use manipulators.

Example, as requested:

#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;
}
娇纵 2024-11-12 18:05:08
#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
#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;
}

Output:

pi = 3.142
决绝 2024-11-12 18:05:08

这是一个示例:

#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 格式 库。

Here's an example:

#include <sstream>

int main()
{
    std::stringstream sout;
    sout << "Hello " << 10 << "\n";

    const std::string s = sout.str();
    std::cout << s;
    return 0;
}

If you want to clear the stream for reuse, you can do

sout.str(std::string());

Also look at the Boost Format library.

再见回来 2024-11-12 18:05:08
 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"
 std::ostringstream

You can use this to create something like the Boost lexical cast:

#include <sstream>
#include <string>

template <typename T>
std::string ToString( const T & t ) {
    std::ostringstream os;
    os << t;
    return os.str();
}

In use:

string is = ToString( 42 );      // is contains "42"
string fs = ToString( 1.23 ) ;   // fs contains something approximating "1.23"
っ左 2024-11-12 18:05:08

您对cout的概念有一点误解。 cout 是一个流,运算符 <<是为任何流定义的。因此,您只需要另一个写入字符串的流即可输出数据。您可以使用标准流(例如 std::ostringstream)或定义自己的流。

所以你的类比不是很准确,因为 cout 不是像 printf 和 sprintf 这样的函数

You have a little misunderstanding for the concept of cout. cout is a stream and the operator << is defined for any stream. So, you just need another stream that writes to string in order to output your data. You can use a standard stream like std::ostringstream or define your own one.

So your analogy is not very precise, since cout is not a function like printf and sprintf

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文