在sprintf的C ++? [英] sprintf in c++?

查看:100
本文介绍了在sprintf的C ++?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在寻找在C ++中的sprintf。

我想建立一个MySQL的查询字符串,但如果我这样做(max_limit是 const int的

 的std ::字符串查询= + max_limit从喇嘛限制选择*;

查询无法工作。


解决方案

在C ++ 11,这已经取得太容易了。使用 的std :: to_string() 为:

 的std ::查询字符串=SELECT * FROM喇嘛极限+的std :: to_string(max_limit);

完成!


老办法,对于那些谁仍然使用C ++ 03。

使用的StringBuilder 并创建的std ::字符串飞为:

 的std ::查询字符串=的StringBuilder()<< &LT从喇嘛限制选择*;< max_limit;

其中,的StringBuilder 被实现为:

 结构的StringBuilder
{
   的std :: stringstream的SS;
   模板< typename的T>
   StringBuilder的&安培;运营商的LT;< (常量T&安培;数据)
   {
        SS<<数据;
        返回*这一点;
   }
   运营商的std ::字符串(){返回ss.str(); }
};


您可以在许多不同的方式,比如使用的StringBuilder

 的std ::字符串克(INT男,INT N)
{
    //动态创建的字符串并返回它
    如果(M< N)
        返回的StringBuilder()&所述;&下; M<< 小于&所述;&下; N;
    返回的StringBuilder()&所述;&下; N'LT;< 小于&所述;&下;米;
}无效F(常量的std ::字符串&安培; S);//调用F在创建动态字符串,并将其传递给函数
F(StringBuilder的()<<'{'<<电脑和LT;<'}'); //为的std ::字符串传递//这是我最喜欢行
性病::字符串s =的StringBuilder()<< 23℃;&下; 大于&所述;&下; 5;

请参阅演示在ideone: http://ideone.com/J995r

和看我的博客上这样的:的即时创建的字符串只是一条线

I'm searching for an sprintf in c++.

I want to build a mysql query string but if I do it like (max_limit is an const int)

std::string query = "select * from bla limit " + max_limit;

The query wont work.

解决方案

In C++11, this has been made too easy. Use std::to_string() as:

std::string query = "select * from bla limit " + std::to_string(max_limit);

Done!


OLD SOLUTION, for those who still use C++03.

Use stringbuilder and create std::string on the fly as:

std::string query = stringbuilder() << "select * from bla limit " << max_limit;

where stringbuilder is implemented as:

struct stringbuilder
{
   std::stringstream ss;
   template<typename T>
   stringbuilder & operator << (const T &data)
   {
        ss << data;
        return *this;
   }
   operator std::string() { return ss.str(); }
};


You can use stringbuilder in many different ways, such as:

std::string g(int m, int n) 
{
    //create string on the fly and returns it
    if ( m < n )
        return stringbuilder() << m << " is less than " << n ;
    return stringbuilder() << n << " is less than " << m ;
}

void f(const std::string & s );

//call f while creating string on the fly and passing it to the function
f(stringbuilder() << '{' << pc << '}' ); //passed as std::string

//this is my most favorite line
std::string s = stringbuilder() << 23  << " is greater than " << 5 ;

See demo at ideone : http://ideone.com/J995r

And see my blog on this : Create string on the fly just in one line

这篇关于在sprintf的C ++?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆