我需要在运行时使用C或C ++格式化字符串(但不能像this示例那样使用boost)。
例如:在运行时我得到像这样的输入字符串" hello world%d%u%s"和带有值的数组。我必须打印格式化的字符串。
我正在寻找c,c ++或std :: function的解决方案
有没有人对我有所了解?
提前致谢
编辑: 带有值的数组表示一个char数组,用于逐字节存储值。在上面的例子中,四个第一个字节将是第一个参数%d,接下来的四个字节将是%u的值,依此类推。
答案 0 :(得分:1)
在C中,这不是直接可能的,除非您的“值数组”是va_list
值,在这种情况下您只需要调用vsnprintf()
。
否则问题是C中没有典型的方法来表示不同(本机)类型的“数组值”。
答案 1 :(得分:1)
如果您早期知道这组值,但需要将它们保存在容器中,直到知道要使用的格式字符串,那么您可以在将它们存储到vector<string>
之前将它们转换为字符串,然后使用简单的find-next-%s / replace-with-next-vector-element循环进行替换。
如果出于某种原因,您希望/需要将值保持为具有看似不同类型的值数组,并将其转换为字符串直到以后,那么您必须实现某种形式的区分联合或多态变体类,例如:
struct Value
{
virtual ~Value() { }
virtual std::string to_string() const = 0;
};
struct Int
{
Int(int x) : x_(x) { }
std::string to_string() const override { return std::to_string(x); }
int x_;
};
struct String
{
String(const std::string& x) : x_(x) { }
std::string to_string() const override { return x_; }
std::string x_;
};
std::vector<Value*> values;
然后,您可以迭代调用to_string()
的值,以便将文本替换为格式字符串。