只写一个函数replace,用于替换
时间: 2024-12-18 21:30:03 浏览: 6
如果你想要简化代码并只编写一个名为 `replace` 的函数来完成字符串替换,我们可以结合上面提到的手动查找和替换子串的功能。但是,由于不使用标准库函数会使得代码变得复杂且效率较低,这里提供一个简化的示例,仅适用于小规模数据:
```c
void replace(char* str, char* old, char* new_str) {
if (str == NULL || old == NULL || new_str == NULL) {
return;
}
int i = 0, j = 0; // 指针索引
int old_len = 0, new_len = 0;
// 找到旧子串的起始位置,并更新索引和长度
while ((old_len = find_substring_index(str, old, i)) != -1) {
// 从原始位置开始复制字符
memmove(&str[i], &str[i + old_len], strlen(str) - i);
// 写入新子串
str[i] = new_str[j];
j++;
// 索引移动到新插入的新子串的下一个位置
i += new_len + 1;
// 更新新子串长度
while (new_str[j] == ' ') j++; // 跳过空格
new_len = j;
}
// 如果有剩余的新子串,追加到字符串末尾
while (j < strlen(new_str)) {
str[strlen(str)] = new_str[j];
j++;
str[strlen(str)] = '\0'; // 终止符添加
}
}
// 手动查找子串的辅助函数
int find_substring_index(const char* haystack, const char* needle, int offset) {
while (haystack[offset] == needle[0]) {
if (memcmp(haystack + offset, needle, strlen(needle)) == 0) {
return offset;
}
offset++;
}
return -1;
}
// 示例
int main() {
char str[] = "Hello, World!";
char old[] = "World";
char new_str[] = "Universe";
replace(str, old, new_str);
printf("替换后字符串: %s\n", str);
return 0;
}
```
这个 `replace` 函数会直接修改输入的 `str` 字符数组,不返回任何值。请注意,这种方法并不推荐用于生产环境,因为它牺牲了效率和可读性。实际项目中,还是建议使用标准库函数,例如 C++ 的 `std::string` 或者 C 标准库提供的替换功能。
阅读全文