簡體   English   中英

使用boost將出現的字符替換為seq數字

[英]replace the occurrence of character with a seq number using boost

如何用包含出現次數的字符串替換字符的多次出現。 例如,如果我有以下表達式。

insert into emp values(?,?,?)

我想要以下轉換后的字符串。

insert into emp values(_p_1,_p_2,_p_3)

我正在嘗試使用boost正則表達式。

誰能告訴我如何使用boost c ++(無迭代或最小迭代)實現這一目標。

目前,我正在使用以下方法:

        std::wstring q=L"insert into emp values(?,?,?)";
        auto loc = q.find(L"?");
        auto len = wcslen(L"?");
        auto c=1;
        while(loc != std::wstring::npos)
        {
            q.replace(loc, len , L"_p_"+to_wstring(c));
            c++;
            loc = q.find(L"?");
        }
        cout<<q.c_str();

請提出更好,更有效的方法。

我只是忘記了正則表達式,而是嘗試使用Boost做這個簡單的事情。

這就像問“如何使用Boost正則表達式將1加到變量中”?

最好的答案,恕我直言,而是使用++來執行加1的任務,並使用循環將特殊字符替換為字符串。

string const query_format = "insert into emp values(?,?,?)";
string const params[] = {"_p_1", "_p_2", "_p3"};

string query;
string const* p = params;
for( char const c : query_format )
{
    if( c == '?' ) { query += *p++; } else { query += c; }
}
// Use `query`

可以選擇將其包裝為replace功能。

免責聲明:編譯器未觸及的代碼。


如果您控制query_format字符串,為什么不使占位符與Boost format兼容。


重新括號要求

,沒有迭代或迭代次數最少

無論您如何執行,都涉及迭代。 您可以將迭代隱藏在函數名稱的后面,僅此而已。 從邏輯上講,實際上避免迭代是不可能的,並且將其隱藏在函數名后面是微不足道的(完全瑣碎的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM