次のプロパティを使用して、 2 つの関数escape(text, delimiter)
を記述しようとしています。unescape(text, delimiter)
の結果に
escape
は が含まれていませんdelimiter
。unescape
の逆escape
、つまりunescape(escape(text, delimiter), delimiter) == text
と のすべての値
text
に対してdelimiter
の許容値を制限しても問題ありませんdelimiter
。
背景: 区切り記号で区切られた値の文字列を作成したいと考えています。文字列から同じリストを再度抽出できるようにするには、個々の区切られた文字列に区切り記号が含まれていないことを確認する必要があります。
私が試したこと:簡単な解決策(疑似コード)を思いつきました:
escape(text, delimiter): return text.Replace("\", "\\").Replace(delimiter, "\d")
unescape(text, delimiter): return text.Replace("\d", delimiter).Replace("\\", "\")
しかし、プロパティ 2 がテスト文字列で失敗したことを発見しました"\d<delimiter>"
。現在、私は次の実用的なソリューションを持っています
escape(text, delimiter): return text.Replace("\", "\b").Replace(delimiter, "\d")
unescape(text, delimiter): return text.Replace("\d", delimiter).Replace("\b", "\")
、またはでdelimiter
はない限り、これはうまくいくようです(これは問題ありませんが、とにかく区切り文字として使用したくありません)。ただし、その正しさを正式に証明していないため、プロパティの 1 つが違反されているケースを見落としている可能性があります。これは非常に一般的な問題であるため、これには「よく知られた証明済みの正しい」アルゴリズムが既にあると思います。したがって、私の質問です (タイトルを参照)。\
b
d