форматирование строки, содержащей кавычки - PullRequest
0 голосов
/ 27 сентября 2011

У меня проблема с форматированием строки, которая содержит кавычки.

Например, я получил эту std :: string: server/register?json={"id"="monkey"}

В этой строке нужно заменить четыре кавычки на \", потому что она будет использоваться как c_str () для другой функции.

Как сделать это наилучшим образом для этой строки?

{"id"="monkey"}

РЕДАКТИРОВАТЬ: Мне нужно решение, которое использует только библиотеки STL, желательно только с String.h.Я подтвердил, что мне нужно заменить «на \».

EDIT2: nvm, обнаружил ошибку в фреймворке

Ответы [ 2 ]

5 голосов
/ 27 сентября 2011

вполне законно иметь символ '"' в 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 голос
/ 27 сентября 2011

Если у вас std::string содержится server/register?json={"id"="monkey"}, вам не нужно ничего заменять, так как оно уже будет правильно отформатировано.

Единственное место, которое вам понадобится, это если вы жестко закодировали строку и присвоили ее вручную. Но тогда вы можете просто заменить кавычки вручную.

...