関数を書く
void inplace(char *str,
const char pattern,
const char* replacement,
size_t mlen)
入力:
str
: で終わる文字列\0
。入力は、インプレース アルゴリズムが必要であることを示しています。
pattern
:手紙。
replacement
: 文字列。
mlen
: メモリのサイズは、メモリstr
の先頭から始まる文字列を保持し、mlen
それよりも大きくする必要がありますstrlen(str)
最終結果はまだ によって指されていstr
ます。
パターンの出現箇所はすべて置換する必要があることに注意してください。
例えば、
helelo\0...........
ここで「helelo」は、最後に置き換える文字列'\0'
です。'\0'
まだ L 有効なバイトがある後。「e」を「123」に置き換えます。
単純なアプローチは次のように機能str
します。パターンが一致すると、残りのすべてを置換文字列を埋める場所にシフトし、パターンを置換で置き換えます。
元の文字列に長さn
があり、 のみが含まれている場合は、シフトがe
必要です。(n-1) + (n-2) + ... + 1
文字列を 1 回のパスと一定のメモリ コストでスキャンするアルゴリズムはありますか?