我想用C++ fmt来填充一个带引号的值,我知道我可以一步完成引号,然后用fmt和一个参数,但是我认为这会比较慢,从可读性的Angular 来看,我想一步完成,我有这个solution。
但IS似乎有点笨重,我是手动做对齐计算会计的事实,我有引号周围的值...
#include <array>
#include <string>
#include <iostream>
#include <fmt/format.h>
void write_padded(const int i,char* data) {
// note: - format_to_n will not zero termiante if out of space
// - use '^' as a fill char for visibility
auto result = fmt::format_to_n(data,7, R"("{}{:^<5})",i,'\"');
*result.out = '\0';
}
int main() {
// space for 5 digits, 2 quotes \0
std::array<char, 8> data{};
write_padded(1, data.data());
std::cout << data.data() << std::endl;
write_padded(10, data.data());
std::cout << data.data() << std::endl;
write_padded(123456789, data.data());
std::cout << data.data() << std::endl;
write_padded(54321, data.data());
std::cout << data.data() << std::endl;
}
这似乎工作,但我想这样做没有我做手工计算宽度。也许也有一个更好的格式字符串。
注意:我知道整数可以超过5位数,而且幻数是不好的,但即使有命名变量,我仍然需要做计算。
1条答案
按热度按时间goqiplq21#
您可以编写一个进行引用的格式化程序,例如:
这个打印
https://godbolt.org/z/Gs5qPTT13