boost::format用法

boost::format用来代替C里面的sprintf,优点是类型齐全,不会因为类型和参数不匹配而导致程序崩溃,而且还可以重复使用参数,并且效率更高
使用示例:

#include <iostream>
#include <string>
#include <boost/format.hpp>

using namespace std;
int _tmain(int argc, char** argv)
{
    // 使用%序号%的方式给出指示符, 后面用%连接对应的数据。
    cout << boost::format("writing %1%,  x=%2% : %3%-th try") % "toto" % 40.23 % 50 << endl;
    // 输出:writing toto,  x=40.23 : 50-th try
   
    // 可以延迟使用,顺序不必一致
    boost::format fmter("%2% %1%");
    fmter % 36;
    fmter % 77;
    cout << fmter << endl;
    // 输出:77 36
   
    // 可重用
    fmter % 12;
    fmter % 24;
    cout << fmter << endl;
    // 输出:24 12

    // 可直接转成字符串
    std::string s = fmter.str();
    std::string s2 = str( boost::format("%2% %1% %2% %1%")%"World"%"Hello");

    cout << s << endl << s2 << endl;
    // 输出:
    // 24 12
    // Hello World Hello World

    // 可以使用printf指示符
    cout << boost::format("%3.1f - %.2f%%") % 10.0 % 12.5  << endl;
    // 输出:10.0 - 12.50%

    // printf指示符里使用N$指定使用第几个参数
    cout << boost::format("%2$3.1f - %1$.2f%%") % 10.0 % 12.5  << endl;
    // 输出:12.5 - 10.00%

    cin.get();
    return 0;
}

今天用Visual Studio写代码,发现在Windows下还要重新安装Boost库,略麻烦,还不如直接使用stringstream(字符串输入输出流),下面介绍一下其使用关键**

stringstream是 C++ 提供的一个字符串流(stream),要使用stringstream,必须包含其头文件:

#include<sstream>
using namespace std;
stringstream ss;

< sstream > 库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本。一般情况下使用stringstream就足够,因为字符串要频繁的涉及到输入输出。

< sstream > 使用string对象来代替字符数组,这样可以避免缓冲区溢出的危险。而且,传入参数和目标对象的类型被自动推导出来,即便使用了不正确的格式化符也没有危险。
与文件流fstream类似,通过插入器(<<)和析取器(>>)这两个运算符可以直接对stringstream上的数据输入输出,而将stringstream中的全部数据输出则是使用成员函数str(),其有两种形式:
1、void str() 无参形式,用于将stringstream流中的数据以string字符串的形式输出
2、void str (const string& s) 以字符串为参数,用以覆盖stringstream流中的数据
代码示例:

#include<iostream>
#include<sstream>
using namespace std;
int main()
{
 stringstream ss;
 ss << "hello";
 ss << " world";
 ss << endl;
 ss << "..." << "hello" << "world" << "..." << endl;
 cout << ss.str() << endl;
}

ss.clear()和ss.str("")成员函数
同文件流fstream中的clear()函数类似,通过clear()成员函数可以清除流的错误状态,主要用在stringstream重复使用时或者多个stringstream对象构造时清空,不然之前的缓冲就停留在输入输出流中。
在对同一个stringstream对象重复赋值,就需要先对流使用clear()函数清空流的状态,此时流占用的内存没有改变,会一直增加(stringstream不主动释放内存),若想改变内存(一般是清除内存,减少内存消耗),需要再配合使用str("")清空stringstream的缓存。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值