(s)printf 的 C++ 标准替代品

标签 c++ string string-formatting iostream stdio

我正在用 C++ 开发一个服务器应用程序,它提供一个 HTML 页面作为对 HTTP 请求的响应。

问题是,目前,我的网页在我的代码中写成常量字符串,我使用<< 插入其他字符串。运算符和 std::stringstream ,仍在字符串本身的写入过程中。查看示例以使其更清楚:

std::string first("foo");
std::string second("bar");
std::string third("foobar");

std::stringstream ss;
ss << "<html>\n"
    "<head>\n"
    "<title>Bitches Brew</title>\n"
    "</head>\n"
    "<body>\n"
    "First string: "
    << first << "\n"
    "Second string: "
    << second << "\n"
    "Third string: "
    << third << "\n"
    "</body>\n"
    "</html>";

虽然我不能简单地把内容塞进一个文件中,但会发生这种情况,因为与 HTML 结构混合的数据会在执行过程中发生变化。这意味着我不能简单地将整个页面写入一个文件,字符串值为 first。 , second , 和 third ,因为这些值会动态变化。

对于第一个请求,我会发送带有 first = "foo"; 的页面,而在第二个请求中我有 first = "anything else" .

此外,我可以简单地返回到 sscanf/sprintf来自 stdio.h并插入我想要的文本——我只需要用正确的格式 (%s) 替换字符串间隙,从文件中读取 HTML 结构,然后插入我想要的任何内容。

我想在没有 C 库函数的情况下在 C++ 中执行此操作,但我不知道使用什么来执行此操作。什么是 C++ 标准解决方案?

最佳答案

除了 (s)printf 本身,标准 C++ 没有直接等同于 (s)printf 的格式。但是,有很多格式库提供此功能,例如 cppformat包含 Python 的 str.format 和安全 printf 的 C++ 实现的库。

也就是说,我建议改用模板引擎,请参阅 C++ HTML template framework, templatizing library, HTML generator library .

或者您总是可以重新发明轮子并通过读取文件并用参数替换一些占位符来编写自己的模板引擎。

关于(s)printf 的 C++ 标准替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14126015/

相关文章:

c++ - 使用抽象类的子类专门化模板

c++ - 乱七八糟的函数指针解读

string - VB6 文本框字体粗细操作

c++ - 我们如何在 C++ 中一次从 STDIN 扫描 100 个字节

python - 使用 format() 舍入、对齐和打印浮点列表

c# - 格式字符串值精度不起作用

c# - String.Format 没有为数字格式提供正确的结果

c++ - 允许赋值或存在当前函数的宏

javascript - 将每个单词的第一个字母大写

c++ - "vperm v0,v0,v0,v17"和未使用的 v0 有什么作用?