开发者

C++将字符串格式化的几种方式总结

目录
  • C++将字符串格式化的几种方式
    • 使用snprintf格式化字符串
    • 使用boost::format格式化字符串
    • 使用stringstream格式化字符串
  • C++11的一个格式化字符串的黑科技
    • 总结

      C++将字符串格式化的几种方式

      具体示例

      使用snprintf格式化字符串

      #include <stdio.h>
      using std::string;
      // 准备数据
      string haha("haha");
      int num = 3;
      // 准备格式
      string fmt("test string: 编程%s. test number: %d");
      char targetString[1024];
      // 格式化,并获取最终需要的字符串
      int realLen = snprintf( targetString,
            sizeof(targetString),
            fmt.c_str(),
            haha.c_str(),
            num );

      使用boost::format格式化字符串

      #include "boost/format.hpp"
      // 准备数据
      string haha("haha");
      int num = 3;
      // 准备格式
      boos开发者_JAVA教程t::format fmt("test string: %s. test number: %d");
      // 格式化
      fmt % haha % num;
      // 获取最终需要的字符串
      string targetString = fmt.str();

      使用stringstream格式化字符串

      #include <sstream>
      using std::stringstream;
      // 准备数据
      string haha("haha");
      int num = 3;
      // 准备根据格式造字符串流
      stringstream fmt;            /* 或者使用 ostringstream */
      // 造字符串流
      fmt << "test string: " << haha << ". test number: " << num;
      // 获取最终需要的字符串
      string targetString = fmt.str();

      C+js+11的一个格式化字符串的黑科技

      有时候我们需要按照某种格式写文件,比如我们做一个代码自动生成工具,要在源代码中写入一个函数,为了保证自动生成的代码文件的可读性,需要将缩进格式也写入到文件,如下面的代码

      int func()
      {
       int i, sum;
       for(i = 0, sum = 0; i < 100; ++i)
       {
        sum += i;
       }
       return sum;
      }

      如果我们在代码中这样写

      char *p = "int func()\
      {\
       int i, sum;\
       for(i = 0, sum = 0; i < 100; ++i)\
       {\
        sum += i;\
       }\
       return sum;android
      }";

      将字符串p写入文件后,结果是字符串全都写在一www.devze.com行里,格式完全丢失,为了保证格式,需要加入一些\t\n等转义字符来控制格式

      char *p = "int func()\n\
      {\n\
       \tint i, sum;\n\
       \tfor(i = 0, sum = 0; i < 100; ++i)\n\
       \t{\n\
        \t\tsum += i;\n\
       \t}\n\
       \treturn sum;\n\
      }";

      这样字符串p就能在保存格式的情况下写入文件。

      这样虽然能解决问题,但很麻烦,而且容易出错,幸好在C艹11中给了一个格式化的字符串定义方法,就是在引号前面加一个大写的R,在引号后面加个括号,如下所示

      char *p = www.devze.comR"(
      int func()
      {
       int i, sum;
       for(i = 0, sum = 0; i < 100; ++i)
       {
        sum += i;
       }
       return sum;
      }
      )";

      这样指针p中就保留了字符串格式,直接将我们键盘输入的tab写成了\t,括号内的字符串是什么格式,写入文件里就是什么格式。

      如果我们的字符串里有引号加括号"(或)"的形式,我们可以在引号和括号中间随便加个什么字符串用以区分,但要前后一致,如下所示

      char *p = R"1234(
      //这样字符串里就可以有)"和"(这样的字符了,这里的1234是随便写的,写什么都行,但要前后一致
      int func()
      {
       int i, sum;
       for(i = 0, sum = 0; i < 100; ++i)
       {
        sum += i;
       }
       return sum;
      }
      )1234";

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜