写一个函数
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 个有效字节。我们想用“123”替换“e”。
一个简单的方法是这样工作的,我们通过str
,当一个模式匹配时,我们将所有其余部分与该位置一起移动以填充替换字符串,然后通过替换替换模式。
如果原始字符串有长度n
并且只包含e
,我们需要(n-1) + (n-2) + ... + 1
移位。
是否有一种算法可以仅通过一次扫描和恒定的内存成本来扫描字符串?