2012-06-14 10 views
7

私は、次のプロパティを持つ2つの機能escape(text, delimiter)unescape(text, delimiter)を書き込みしようとしている:単一の文字からエスケープする最も単純なアルゴリズムは何ですか?

  1. escapeの結果はdelimiterが含まれていません。

  2. unescapedelimiterの許容値を制限するOKで、textdelimiter

の全ての値に対して、すなわち

unescape(escape(text, delimiter), delimiter) == text 

escapeの逆です。


背景:私は値の区切り文字で区切られた文字列を作成します。同じリストを再び文字列から抽出できるようにするためには、分離された個々の文字列に区切り文字が含まれていないことを確認する必要があります。私は簡単な解決策(擬似コード)を思い付いた:

escape(text, delimiter): return text.Replace("\", "\\").Replace(delimiter, "\d") 
unescape(text, delimiter): return text.Replace("\d", delimiter).Replace("\\", "\") 

が、プロパティ2は、テスト文字列"\d<delimiter>"に失敗したことを発見し、私はを試してみた何


。現在、私は(私はとにかく区切り文字としてそれらを使用したくない罰金である)限りdelimiter\bdではないとして、動作しているようです、次の作業ソリューション

escape(text, delimiter): return text.Replace("\", "\b").Replace(delimiter, "\d") 
unescape(text, delimiter): return text.Replace("\d", delimiter).Replace("\b", "\") 

を持っています。しかし、正式にその正当性を証明していないので、私はプロパティの1つが侵害されたいくつかのケースを見逃してしまったのではないかと心配しています。これは一般的な問題であるため、これについてはすでに「よく知られている実績のある正しい」アルゴリズムがあると仮定します(タイトルを参照)。

+2

エスケープしますか?信頼できる、シンプルで速い?笑。 – Will

+1

信頼性が高く、シンプルで速いエスケープの問題は何ですか? –

答えて

関連する問題