相关文章推荐
坚强的大蒜  ·  this' implicitly has ...·  1 年前    · 
彷徨的热带鱼  ·  Vbs Popup ...·  1 年前    · 
开心的炒饭  ·  Using a State ...·  2 年前    · 
备案 控制台
学习
实践
活动
专区
工具
TVP
写文章
专栏首页 bit哲学院 C++:用sprintf()快速把想要的东西转成string类
3 0

海报分享

C++:用sprintf()快速把想要的东西转成string类

参考链接: C++ snprintf()

我们在使用c++时,通常会把一些我们想要的信息整合到一个string实例里,然后转到cout中输出。一开始用的方法可能是通过先构造一个空的string对象,然后通过”+=”来一个个构造我们想要的string对象。

这里存在一个麻烦,就是当数据类型繁杂(int,float,double转string),数据数量偏多,数据在信息中比较分散时,一步步的构造会十分麻烦。还要用流来转数据为string。(特别是当数据还要保持精度时,还要用fixed,那酸爽。。。。)降低了编程的效率。

这里介绍最近学会的sprintf()函数,可以很好的解决这个问题。

这个函数是在<cstdio>这个头文件中。  函数原型是:

int snprintf ( char * s, size_t n, const char * format, ... );

它可以把你想要的信息统统以c风格的字符串形式存入s中,然后,调用string类的构造函数,即可以构造出一个你想要的string。

参数列表解释:  1、s是存放c风格字符串的数组第一个元素的指针  2、n是你想要使用的这个数组的最大的长度。  3、format是格式,其实和printf()相类比,就可以知道是类似”%s”这种,这样的话,把你想要的信息都在”“里面实现,而且控制精度也十分方便,就像printf()的那样。  4、…表示你的变量,按照format中的从左到右的顺序排列完整即可。  5、返回值是成功改变的字符的数量,如果出现错误的话,返回负数

举例说明:  你想要为银行的vip客户创建一个名片。只需

using namespace std;

string VIPAccount::profile() const {

double limit = 1000;

char a[300];  // 建一个足够大的数组就好

memset(a, 0, sizeof(a));

snprintf(a,sizeof(a),

"ID:%d\nBALANCE:%.6lf\nVALID:Y\nTYPE:VIP\nLOAN:%.6lf,LIMIT:%.6lf\n",

_id, _balance, _loan, limit);

string temp(a);

return temp;

}

(当然此处省略了VIPAccount这个类的声明。。)

的确是很方便,比一个个的去构造要方便多了。。。

当然,我们在c文件中也可以用这个来方便地构造我们想要的c风格字符串。

做此记录,以免以后忘记如何使用:)

本文转载自: https://blog.csdn.net/luojj26/article/details/51045094?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161326704816780271520963%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161326704816780271520963&biz_id=0&utm_medium=distribute.pc_search_result.none-ta 复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。