2

string addlashes(string $ str)データベースクエリなどで引用符で囲む必要のある文字の前に円記号が付いた文字列を返します。これらの文字は、一重引用符(')、二重引用符( ")、円記号()、およびNUL(NULLバイト)です。

私はこのphp関数と同等のC++に取り組んでいます。現在、私の関数はネストされたreplace呼び出しを使用しており、\を\\に、'\'に置き換えています。それはまったくきれいではなく、それも非常に遅いです。

標準のC++ライブラリと関数のみを使用する最良の解決策は何ですか?私は絶対に最速の方法を意味します。

4

1 に答える 1

1
  1. シングルパス(forループ)およびswitch各文字で文字列を確認します。
  2. エスケープが必要な文字に遭遇した場合は、バックスラッシュを出力バッファにプッシュします
  3. 現在の文字を出力バッファにプッシュします。

std::ostringstream出力バッファにはを使用します。

これは非常に効率的で(シングルパス、バッファ出力)、実装が簡単です。さらに効率的にするにはstd::string、出力バッファとしてaを直接使用し、を使用して文字を追加しpush_back、ループの前にreserve十分な容量(たとえば)を追加します。1.5 * input.length()

于 2011-07-30T14:02:14.810 に答える