我用 C 创建了一个程序,它使用 strstr
、strncpy
和 sprintf
函数将所有子字符串替换为替换字符串。我的程序的唯一缺陷是,当您想要替换例如搜索“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/