如何编写代码生成格式化的标准字符串实例?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1294个文字,预计阅读时间需要6分钟。
两种格式化字符串方法+Python3中的支持,一种C风格格式,格式化的部分用%开头。
两种格式化字符串方法
众所周知,C++的std::string功能残缺,各种功能都没有,比如格式化字符串功能。
在python3中,支持两种格式化字符串的方法,一种是C风格,格式化的部分用%开头,%后面的对应具体类型(比如%s对应字符串%d对应整型),另一种则是类型无关的风格,{0}对应第1个参数,{1}对应第2个参数。
>>> "{0}'s age is {1}".format("赤红", 11) "赤红's age is 11" >>> "%s's age is %d" % ("赤红", 11) "赤红's age is 11"
而在C++中则只能借用C函数,用snprintf来格式化一片缓冲区
#define BUFFSIZE 512 char buf[BUFFSIZE]; snprintf(buf, BUFFSIZE, "%s's age is %d\n", "赤红", 11);
亦或者用类型无关的流运算符
std::ostringstream os; os << "赤红" << "'s age is " << 11 << "\n"; std::string s = os.str();
暂且不谈效率问题,这种用<<拼接多个不同类型对象的做法代码量较大,而且在控制具体输出格式时更为麻烦,比如控制数字所占位数,或者小数点后位数。至少繁杂得让我总是记不起来,宁可使用C风格snprintf来控制。
本文共计1294个文字,预计阅读时间需要6分钟。
两种格式化字符串方法+Python3中的支持,一种C风格格式,格式化的部分用%开头。
两种格式化字符串方法
众所周知,C++的std::string功能残缺,各种功能都没有,比如格式化字符串功能。
在python3中,支持两种格式化字符串的方法,一种是C风格,格式化的部分用%开头,%后面的对应具体类型(比如%s对应字符串%d对应整型),另一种则是类型无关的风格,{0}对应第1个参数,{1}对应第2个参数。
>>> "{0}'s age is {1}".format("赤红", 11) "赤红's age is 11" >>> "%s's age is %d" % ("赤红", 11) "赤红's age is 11"
而在C++中则只能借用C函数,用snprintf来格式化一片缓冲区
#define BUFFSIZE 512 char buf[BUFFSIZE]; snprintf(buf, BUFFSIZE, "%s's age is %d\n", "赤红", 11);
亦或者用类型无关的流运算符
std::ostringstream os; os << "赤红" << "'s age is " << 11 << "\n"; std::string s = os.str();
暂且不谈效率问题,这种用<<拼接多个不同类型对象的做法代码量较大,而且在控制具体输出格式时更为麻烦,比如控制数字所占位数,或者小数点后位数。至少繁杂得让我总是记不起来,宁可使用C风格snprintf来控制。

