void format_string(char * str, char * buf, int size)
{
for (int i=0; i<size; i++)
buf[i] = ' '; // initialize the string with spaces
int x = 0;
while (str[x])
{
if (x >= size) break;
buf[x] = str[x]; // fill up the string
}
buf[size-1] = 0; // termination char
}
6条答案
按热度按时间ibps3vxo1#
在C20中,你可以使用
std::format
,它为C带来了类似Python的格式:直到它被广泛使用,你可以使用开源的{fmt} formatting library,
std::format
是基于。免责声明:我是{fmt}和C++20
std::format
的作者。3vpjnl9f2#
试试这个https://github.com/fmtlib/fmt
8i9zcol23#
你有很多选择。例如使用流。
source.cpp
u4vypkhs4#
@mattn是正确的,https://github.com/fmtlib/fmt上的fmt库正好提供了这个功能。
令人兴奋的消息是,这已经被接受到C20标准中。
在C20中,您可以使用fmt库,因为它将是std::fmt
https://www.zverovich.net/2019/07/23/std-format-cpp20.htmlhttps://en.cppreference.com/w/cpp/utility/format/format
bn31dyow5#
你可以快速编写一个简单的函数来返回一个固定长度的字符串。
我们考虑 str 字符串以null结尾,buf在调用函数之前已经定义。
用作
tjjdgumg6#
如果你不能像上面提到的那样使用fmt,最好的方法是使用一个 Package 器类来格式化。下面是我曾经做过的:
然后你可以把它作为
std::cout << table_entry("some_string", 10)
使用。你可以根据你的需要修改table_entry
。如果你没有类模板参数推导,你可以实现一个make_table_entry
函数来进行模板类型推导。需要
format_guard
,因为std::ostream
上的某些格式选项是粘性的。