2011-09-27 2 views
0

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

К примеру, я получил эту зЬй :: строка: server/register?json={"id"="monkey"}

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

Как сделать это лучше всего на этой струне?

{"id"="monkey"} 

EDIT: Мне нужно решение, которое использует только библиотеки STL, предпочтительно только с String.h. Я подтвердил, что мне нужно заменить «с помощью».

EDIT2: Nvm, нашел ошибку в рамках

+0

Что вы имеете в виду под «кавычки заменяются' \»' "? Является ли строка выборкой буква в вашем коде или параметром, взятым откуда-то во время выполнения? – Griwes

+1

Вы помещаете это в исходный код программы в виде строкового литерала? Это единственный раз, когда вам нужно избегать цитат. В типичном случае, например, при чтении данных из файла или сетевого подключения, вам не нужно (или хотите) избежать кавычек. –

+0

В C++ и C# '\ "' жертвует кавычку ... – vinay

ответ

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 
+0

Я уверен, что мое приложение dosn't работает без \" в C-строке. Он отправляется на действительно большие рамки для обработки, поэтому я не могу изменить то, что происходит. Во всяком случае, есть ли у вас еще один пример использования только STL-библиотек, а не для замены «с помощью»? Благодаря! – KaiserJohaan

+0

Хорошо, так что у рамки, над которым вы работаете, есть ошибка. Если вы не можете использовать boost (я действительно питти, вы ... развиваетесь на C++ без повышения, как на велосипеде без педалей). Вам нужно будет написать свою собственную функцию на основе std :: string :: find, которая вернет позицию в цитату, а затем используйте std :: string :: replace http://www.cplusplus.com/reference/string/строка/заменить / –

1

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

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

Смежные вопросы