Nas*_*sim 2 c string substring
我创建了一个在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);
Run Code Online (Sandbox Code Playgroud)
您可以在上次替换后返回指向原始字符串中某个位置的指针,然后下次使用该指针而不是原始指针调用您的函数。
请注意,您通常应该在下面的代码中使用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);
}
Run Code Online (Sandbox Code Playgroud)
输出:
There There End Is Nigh
Run Code Online (Sandbox Code Playgroud)