本篇文章主要介绍现代C++字符串低格的技巧。在此之前,回顾了一些老的字符串低格的技巧,并剖析各自的好坏。在最后给出了一种提供给老编译器的折中方案linux服务器代维,由于新的低格方式须要C++支持。

字符串低格是非常常用的功能,这儿就不多做介绍,直接步入主题。

在C++20前,标准库也提供了多种的低格方式,主要有:

C`printf`族函数

由C语言标准库引入的一组函数format命令参数有哪些,典型的函数有:

int sprintf(char* buffer, const char* format, ... );     //不推荐使用 
int snprintf(char* buffer, std::size_t buf_size, const char* format, ... );

catⅰa参数命令_format命令参数有哪些_命令中参数的作用

使用方法也比较直观:

int i = 3;
double d = 6.7;
const char* cs = "cs";
std::string ss = "ss";
char str[64] = { 0 };
snprintf(str, sizeof(str)-1, "i=%d, d=%-6.2f, cs=%s, ss=%s", i, d, cs, ss.c_str());

输出:

i=3,d=6.70,cs=cs,ss=ss

format命令参数有哪些_catⅰa参数命令_命令中参数的作用

须要注意下,6.70前面有两个空格,由于指定输出6个字符的长度format命令参数有哪些,但是左对齐linux之家,所以左侧空下来2个空格。

这些方法还是比较直观的,但缺点也不少:

C++低格输出

C的方法不太尽如人意,我们看下C++流式的处理代码:

std::stringstream oss;
oss << "i=" << i 
    << ", d=" << std::left << std::setw(6) << std::fixed << std::setprecision(2) << d
    << ", cs=" << cs
    << ", ss=" << ss;

里面的代码与上例的代码输出完全一样。与snprintf方法相比,这儿不用关心字段大小了,std::stringstream会随着内容降低容量动态下降;operator

Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复