C语言高效实现字符串替换:replaceCstr 函数详解
C语言高效实现字符串替换:replaceCstr 函数详解
在C语言编程中,字符串替换是一项常见的任务。本文将介绍一个高效的 replaceCstr 函数,它可以将字符串中所有出现的指定子字符串替换为另一个字符串。
函数原型
char* replaceCstr(const char* allStr, const char* searchStr, const char* replaceStr, bool isCaseSensitive);
参数说明:
allStr: 待替换的原字符串。searchStr: 需要被替换的子字符串。replaceStr: 用于替换的新字符串。isCaseSensitive: 是否区分大小写,默认为true(区分大小写)。
返回值:
- 函数返回一个指向新字符串的指针,该字符串是将
allStr中所有出现的searchStr替换为replaceStr后的结果。如果替换失败,则返回NULL。
代码实现
以下是 replaceCstr 函数的C语言代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
char* replaceCstr(const char* allStr, const char* searchStr, const char* replaceStr, bool isCaseSensitive) {
if (allStr == NULL || searchStr == NULL || replaceStr == NULL) {
return NULL;
}
int allLen = strlen(allStr);
int searchLen = strlen(searchStr);
int replaceLen = strlen(replaceStr);
int count = 0;
const char* p = allStr;
while ((p = strstr(p, searchStr)) != NULL) {
count++;
p += searchLen;
}
int newLen = allLen + count * (replaceLen - searchLen);
char* newStr = (char*) malloc((newLen + 1) * sizeof(char));
if (newStr == NULL) {
return NULL;
}
int i = 0, j = 0;
while (i < allLen) {
if (isCaseSensitive ? strncmp(allStr + i, searchStr, searchLen) == 0 : strncasecmp(allStr + i, searchStr, searchLen) == 0) {
strncpy(newStr + j, replaceStr, replaceLen);
i += searchLen;
j += replaceLen;
} else {
newStr[j++] = allStr[i++];
}
}
newStr[j] = '�';
return newStr;
}
代码解析
- 参数检查: 首先,函数检查输入参数是否有效 (不为空)。
- 计算新字符串长度: 函数使用
strstr函数查找allStr中所有出现的searchStr, 并计算替换后的字符串总长度newLen。 - 内存分配: 根据计算出的
newLen, 函数使用malloc分配足够的空间来存储新的字符串。 - 字符串替换: 函数遍历原字符串
allStr, 并使用strncmp(或strncasecmp用于不区分大小写的情况) 判断当前位置是否匹配searchStr。- 如果匹配,则将
replaceStr复制到新字符串中。 - 否则,将原字符串对应字符复制到新字符串中。
- 如果匹配,则将
- 返回结果: 最后,函数返回指向新字符串的指针。
算法效率
该函数的时间复杂度为 O(n*m), 其中 n 是 allStr 的长度, m 是 searchStr 的长度。
总结
replaceCstr 函数提供了一种高效且灵活的方式来进行字符串替换,并可以根据需要选择是否区分大小写。 这段代码可以作为C语言字符串处理的实用工具,应用于各种场景。
原文地址: https://www.cveoy.top/t/topic/jonc 著作权归作者所有。请勿转载和采集!