【问题标题】:C++ string substitution with the string format operator [duplicate]使用字符串格式运算符进行 C++ 字符串替换 [重复]
【发布时间】:2012-03-27 00:44:32
【问题描述】:

我对 C++ 有点陌生,来自 python。我真正怀念的一项功能是字符串格式运算符。我已经看到很多可以在 printf() 函数中使用它的示例,但是,有时仅在字符串变量中替换占位符就很方便。这是一个使用 mysqldb 模块的 python 示例:

...
stmt = 'INSERT INTO %s(pid, starttime) VALUES("%s","%s")' % ('pids', int(p0.pid), episode[0][1])
cursor.execute(stmt)

你能在 C++ 中做类似的事情吗?我没有在谷歌上找到任何示例。

【问题讨论】:

  • 不要那样做——你正在向 SQL 注入敞开大门!改为使用您选择的数据库 API 提供的任何工具进行常规参数绑定...
  • 这只是一个例子。此功能还有很多其他应用程序。

标签: c++


【解决方案1】:

查看Boost format library

它可以做类似的事情

str(format("writing %s,  x=%s : %d-th step \n") % "toto" % 40.23 % 50)

【讨论】:

    【解决方案2】:

    你的意思是,你想用许多字符串片段和变量组成一个字符串?

    int someInt = 10;
    std::wstringstream wss;
    wss << L"Some string stuff and then " << someInt << L" which was an int" << std::endl;
    

    然后您可以将 wstringstream 的内容转换为其他格式。要获得 C 字符串,我相信调用会是 wss.str().c_str()。

    【讨论】:

    • 这很麻烦。我打算这样做,但我认为必须有更好的方法。 C++中没有字符串替换?
    • 可能比 Java 中的字符串连接稍微麻烦一些。否则,这是一种无需任何额外库即可实现该功能的非常直接的方法。
    • 关于附加库的观点。谢谢。
    • 实际上,“没有额外的库”你可以使用sprintf,它使用类似的语法,除了它都是一个函数调用。在有人抱怨“太不安全”之前,这里有一些答案正是在 Stack Overflow 中,展示了如何将其包装到一个 strsprintf 中,并提供一个例如:std::string
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    相关资源
    最近更新 更多