格式化包含引号的字符串

时间:2011-09-27 13:15:52

标签: c++ string json quotation-marks jsoncpp

我在格式化包含引号的字符串时遇到问题。

例如,我得到了这个std :: string:server/register?json={"id"="monkey"}

此字符串需要将四个引号替换为\",因为它将用作另一个函数的c_str()。

如何以最佳方式对此字符串执行此操作?

{"id"="monkey"}

编辑:我需要一个仅使用STL库的解决方案,最好只使用String.h。我已经确认我需要替换“with”。

EDIT2:Nvm,发现框架中的错误

2 个答案:

答案 0 :(得分:5)

在C字符串中加入'''字符是完全合法的。所以简短的回答是你不需要做什么。只有在输入源代码时才需要转义引号

std::string str("server/register?json={\"id\"=\"monkey\"}")
my_c_function(str.c_str());// Nothing to do here

但是,一般情况下,如果要用其他字符串替换子字符串,请使用提升字符串算法。

#include <boost/algorithm/string/replace.hpp>
#include <iostream>
int main(int, char**)
{
    std::string str = "Hello world";
    boost::algorithm::replace_all(str, "o", "a"); //modifies str
    std::string str2 = boost::algorithm::replace_all_copy(str, "ll", "xy"); //doesn't modify str
    std::cout << str << " - " << str2 << std::endl;
}
// Displays : Hella warld - Hexya warld

答案 1 :(得分:1)

如果std::string包含server/register?json={"id"="monkey"},则无需替换任何内容,因为它已经正确格式化。

您需要的唯一地方就是您对字符串进行了硬编码并手动分配。但是,您可以手动替换引号。