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

我们在使用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风格字符串。

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

你可能感兴趣的:(C++,String,C语言)