部分替换
在部分替换中,只替换第一个匹配的子串。示例代码如下:
void partial_replace(char *str, const char *find, const char *replace) {
int find_len = strlen(find);
int replace_len = strlen(replace);
int str_len = strlen(str);
for (int i = 0; i <= str_len - find_len; i++) {
int j;
for (j = 0; j < find_len; j++) {
if (str[i + j] != find[j]) {
break;
}
}
if (j == find_len) {
memmove(str + i + replace_len, str + i + find_len, str_len - i - find_len + 1);
memcpy(str + i, replace, replace_len);
break; // 替换第一个匹配项后退出
}
}
}
全局替换
在全局替换中,会替换所有匹配的子串。以下是一个示例,演示如何实现全局替换:
void global_replace(char *str, const char *find, const char *replace) {
int find_len = strlen(find);
int replace_len = strlen(replace);
int str_len = strlen(str);
for (int i = 0; i <= str_len - find_len; i++) {
int j;
for (j = 0; j < find_len; j++) {
if (str[i + j] != find[j]) {
break;
}
}
if (j == find_len) {
memmove(str + i + replace_len, str + i + find_len, str_len - i - find_len + 1);
memcpy(str + i, replace, replace_len);
i += replace_len - 1; // 跳过已替换的部分
str_len = str_len - find_len + replace_len;
}
}
}
通过适当调整循环和指针位置,可以实现全局替换。全局替换会替换所有匹配的子串。
|