[英]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.