2011-09-27 29 views
0

我遇到問題格式化包含引號的字符串。格式化包含引號的字符串

例如,我得到這個的std :: string:server/register?json={"id"="monkey"}

此字符串需要有由\"更換四個引號,因爲它會被用作其他功能的c_str()。

這是怎麼做到這個字符串的最佳方式?

{"id"="monkey"} 

編輯:我需要一個解決方案,只使用STL庫,最好只用String.h。我確認我需要用「\」替換。

EDIT2:NVM,發現的bug在框架

+0

你所說的'「,「通過'\替換引號」意思?字符串是否在代碼中採樣了一個字面值,或者在運行時從某個地方採集了一個參數? – Griwes

+1

您是否將此作爲字符串文字放入程序的源代碼中?這是您唯一需要避開引號的時間。在從文件或網絡連接讀取數據的典型情況下,您不需要(或不想)轉義引號。 –

+0

在c + +和C#'\「'捐贈引號... – vinay

回答

5

它是完全合法的有一個C-string中的「'字符。因此,簡單的答案是,你需要做什麼。轉義引號只需要在源代碼中

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

好的,所以你正在使用的框架有一個bug。如果你不能使用提升(我真的很吝惜你......用C++開發沒有提升就像騎自行車沒有踏板一樣)。你必須根據std :: string :: find編寫你自己的函數,它會將位置返回到一個引號,然後使用std :: string :: replace http://www.cplusplus.com/reference/string /字符串/替換/ –

1

如果std::string包含server/register?json={"id"="monkey"},就沒有必要更換任何東西,因爲它可能已被正確格式化。

如果您對字符串進行了硬編碼並手動分配了字符串,那麼您只需要這樣做。但是,您可以手動替換引號。