c - 当子字符串与替换字符串相似时,如何在 C 中替换子字符串?

标签 c string substring

我用 C 创建了一个程序,它使用 strstrstrncpysprintf 函数将所有子字符串替换为替换字符串。我的程序的唯一缺陷是,当您想要替换例如搜索“The”并希望将其替换为“There”,这会导致无限循环,因为程序不断查找刚刚替换的内容。我如何在 C 中解决这个问题,或者是否有其他方法在 C 中实现这样的函数?谢谢。

替换函数:(多次调用,直到不再找到任何匹配项)。

char *searchAndReplace(char *text, char *search, char *replace){
  char buffer[MAX_L];
    char *ptr;
    char *modText = malloc(4096);
    if(!(ptr = strstr(text, search))){
        return;
    }
    strncpy(buffer, text, ptr-text);
    sprintf(buffer+(ptr-text), "%s%s", replace, ptr + strlen(search));
    strcpy(text, buffer);

最佳答案

您可以在上一次替换之后返回一个指向原始字符串中某个位置的指针,然后在下次使用该指针而不是原始指针来调用您的函数。

请注意,您通常应该在下面的代码中使用 strncpy 而不是 strcpy,但我试图尽可能多地保留原始代码,所以我做出了简化的假设。

#include <string.h>
#include <stdio.h>
#include <stdlib.h>


#define MAX_L 4096
char *searchAndReplace(char *text, char *search, char *replace){
    char buffer[MAX_L];
    char *ptr;
    if(!(ptr = strstr(text, search))){
        return NULL;
    }
    strncpy(buffer, text, ptr-text);
    sprintf(buffer+(ptr-text), "%s%s", replace, ptr + strlen(search));
    strcpy(text, buffer);
    return ptr + strlen(search);
}

int main(){
    char* original = malloc(MAX_L);
    memset(original, 0, MAX_L);
    strcpy(original, "The The End Is Nigh");


    char* current = original;
    do {
        current = searchAndReplace(current, "The", "There");
    } while (current);

    printf("%s\n", original);
}

输出:

There There End Is Nigh

关于c - 当子字符串与替换字符串相似时,如何在 C 中替换子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23257216/

相关文章:

c - 如何分析 C 程序的内存使用情况

c - main() 的多重定义

Java 编程 - 当我需要字符时,我的用户名显示整数。为什么?

javascript - 如何检查String是否包含 "?"标记

c - GDB 不会在没有调试信息的情况下跳过函数

c - 我怎样才能打破一个功能

c - 有没有办法将转义序列转换为字符串?

PHP 字符串编码错误

JavaScript 子字符串向后

java - 查找数字的个位数