我尝试在 C 中编写一个字符串替换函数,该函数适用于char *
已使用malloc()
. 它有点不同,它会查找和替换字符串,而不是起始字符串中的字符。
如果搜索和替换字符串的长度相同(或者替换字符串比搜索字符串短),这很简单,因为我分配了足够的空间。如果我尝试realloc()
使用realloc()
.
也许一些代码会有所帮助:
void strrep(char *input, char *search, char *replace) {
int searchLen = strlen(search);
int replaceLen = strlen(replace);
int delta = replaceLen - searchLen;
char *find = input;
while (find = strstr(find, search)) {
if (delta > 0) {
realloc(input, strlen(input) + delta);
find = strstr(input, search);
}
memmove(find + replaceLen, find + searchLen, strlen(input) - (find - input));
memmove(find, replace, replaceLen);
}
}
该程序有效,直到我尝试realloc()
在替换字符串比初始字符串长的情况下。(它仍然有效,它只是吐出错误以及结果)。
如果有帮助,调用代码如下所示:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void strrep(char *input, char *search, char *replace);
int main(void) {
char *input = malloc(81);
while ((fgets(input, 81, stdin)) != NULL) {
strrep(input, "Noel", "Christmas");
}
}