#include <iostream>
#include <cstdio>
#include <cstdarg>
#include <string>
#include <vector>
#include <boost/format.hpp>
std::string string_format(const char *fmt, ...) {
std::vector<char> str(100);
va_list ap;
while (1) {
va_start(ap, fmt);
int n = vsnprintf(&str[0], str.size(), fmt, ap);
va_end(ap);
if (n > -1 && n < str.size()) {
str.resize(n);
return &str[0];
}
str.resize(str.size() * 2);
}
}
int main() {
std::cout << string_format("%s %s %s!\n", "Hello", "World");
std::cout << boost::format("%s %s %s!\n") % "Hello" % "World";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y3N0ZGFyZz4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGJvb3N0L2Zvcm1hdC5ocHA+CgpzdGQ6OnN0cmluZyBzdHJpbmdfZm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7CiAgICBzdGQ6OnZlY3RvcjxjaGFyPiBzdHIoMTAwKTsKICAgIHZhX2xpc3QgYXA7CiAgICB3aGlsZSAoMSkgewogICAgICAgIHZhX3N0YXJ0KGFwLCBmbXQpOwogICAgICAgIGludCBuID0gdnNucHJpbnRmKCZzdHJbMF0sIHN0ci5zaXplKCksIGZtdCwgYXApOwogICAgICAgIHZhX2VuZChhcCk7CiAgICAgICAgaWYgKG4gPiAtMSAmJiBuIDwgc3RyLnNpemUoKSkgewogICAgICAgICAgICBzdHIucmVzaXplKG4pOwogICAgICAgICAgICByZXR1cm4gJnN0clswXTsKICAgICAgICB9CiAgICAgICAgc3RyLnJlc2l6ZShzdHIuc2l6ZSgpICogMik7CiAgICB9Cn0KCmludCBtYWluKCkgewogIHN0ZDo6Y291dCA8PCBzdHJpbmdfZm9ybWF0KCIlcyAlcyAlcyFcbiIsICJIZWxsbyIsICJXb3JsZCIpOwogIHN0ZDo6Y291dCA8PCBib29zdDo6Zm9ybWF0KCIlcyAlcyAlcyFcbiIpICUgIkhlbGxvIiAlICJXb3JsZCI7CiAgcmV0dXJuIDA7Cn0=