📅  最后修改于: 2023-12-03 15:42:16.243000             🧑  作者: Mango
这是 Gate-CS-2006 考试的第 73 题。该题目要求进行字符串替换操作,要求使用 C 语言实现。
给定一个字符串 s,以及两个字符串 old 和 new。需要将字符串 s 中所有出现的 old 子串都替换成 new 子串。假设 old 和 new 的长度相等且不为 0。
例如,当 s = "abcdefg",old = "cd",new = "11" 时,s 的新值应为 "ab11efg"。
要求使用 C 语言编写程序,实现字符串替换操作,并将结果输出到标准输出中。
为了实现字符串替换操作,我们可以遍历字符串 s 的所有可能位置,检查是否需要进行替换操作,并将结果保存在另一个字符串中。
具体的,我们可以使用一个循环遍历字符串 s 的每一个下标位置 i。在每一轮循环中,如果 s 的下标 i 到 i+length(old)-1 的子串等于 old,则将 new 添加到新字符串中,否则将 s 中的字符添加到新字符串中。
注意,为了防止新字符串分配的内存过多,我们可以事先预估需要分配多少内存空间。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *replace(char *s, char *old, char *new) {
int old_len = strlen(old);
int new_len = strlen(new);
char *result = malloc(strlen(s) * new_len / old_len + 1);
int i = 0;
while (*s) {
if (strncmp(s, old, old_len) == 0) {
strcpy(&result[i], new);
i += new_len;
s += old_len;
} else {
result[i++] = *s++;
}
}
result[i] = '\0';
return result;
}
int main() {
char *s = "abcdefg";
char *old = "cd";
char *new = "11";
char *result = replace(s, old, new);
printf("%s\n", result);
free(result);
return 0;
}
其中,replace
函数用于实现字符串替换操作,main
函数中进行测试。注意,测试完成后需要手动释放 result
指针所指向的内存空间。