0

文字列置換を実装するための C++ 関数を作成しています。関数は次のようになります。

using namespace std;

string Replace(const string & str, const string & strOld,
            const string & strNew, bool useRegex, bool caseSensitive)
{
    regex::flag_type flag=regex::basic;
    if(!caseSensitive)
         flag |= regex::icase;

    if(!useRegex)
        // WHAT TO DO ?

    std::regex rx(strOld,flag);
    string output=regex_replace(str,rx,strNew);
    return output;
}

strOldinのすべての出現箇所を に置き換えstrますstrNew。私はそれを使用std::regexstd::regex_replaceて実装しようとしました。useRegexが true の場合にうまく機能します。ただし、useRegexisの場合、それが正規表現文字列ではなく単なる文字列であるfalseことを伝えることができません。strOld

たとえば、次のように呼び出します。

string output=Replace("hello.",".","?",false,true);

"??????"と思っているうちに戻ってきます"hello?"

4

1 に答える 1

1

中途半端な解決策は、正規表現を前処理し、すべてのメタ文字を手動でエスケープすることです。この機能がC++ 11にない場合、コメントからそう思われるように聞こえますが、これが最善の解決策です。

于 2012-06-23T13:28:12.880 に答える