打印

部分替换与全局替换字符串

[复制链接]
1869|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ulystronglll|  楼主 | 2024-5-31 20:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
部分替换
在部分替换中,只替换第一个匹配的子串。示例代码如下:

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;
        }
    }
}
通过适当调整循环和指针位置,可以实现全局替换。全局替换会替换所有匹配的子串。


使用特权

评论回复
沙发
caigang13| | 2024-6-2 17:48 | 只看该作者
这个在什么场景下有应用?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

1261

帖子

1

粉丝