関数を書く
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 回のパスと一定のメモリ コストでスキャンするアルゴリズムはありますか?