3

私は、次のことを行うものをオンラインで探していましたが、成功していません。Betfair SOAP 応答の一部として、さまざまな文字区切り文字を使用して情報の特定の部分を識別する醜い文字列が返されました。ややこしいのは、常に 1 文字の長さではないということです。具体的には、文字列を文字で分割する必要がありますが、最初にのすべてのインスタンスを個人フラグに':'置き換えた後でのみです(最初の分割後に再度置き換える必要があります)。"\\:""-COLON-"

基本的に、このような文字列のすべての部分が必要です

 "6(2.5%,11\:08)~true~5.0~1162835723938~"

なる

 "6(2.5%,11-COLON-08)~true~5.0~1162835723938~

perlでは(記憶から)

 $mystring =~ s/\\:/-COLON-/g; 

std::string具体的std::findには、の関数をしばらく探していて、std::replaceこれらの基本的な関数を使用して必要なことを行う方法をコーディングできることを知っていますが、標準ライブラリ (または他の場所) に関数があるかどうか疑問に思っていましたそれはすでにこれを行いますか??

4

2 に答える 2

5

boost::replace_all(input_string, "\\:", "-COLON-");

于 2012-07-10T19:33:06.287 に答える
1

C ++ 11を使用している場合は、次のような方法でうまくいくはずです。

#include <string>
#include <regex>

int main()
{
std::string str("6(2.5%,11\\:08)~true~5.0~1162835723938~");
std::regex rx("\\:"); 
std::string fmt("-COLON-");
std::regex_replace(str, rx, fmt);

return 0;
}

編集:一致のタイプにもオプションの4番目のパラメーターがあります。これは、std::regex_constants私が信じている名前空間にあるものなら何でもかまいません。たとえば、正規表現の最初の出現のみを、指定された形式に置き換えます。

于 2012-07-10T19:39:37.717 に答える