Си, как заменить все совпадения подстроки в строке.
Есть код меняющий подстроку первое найденное её вхождение в строке на нужные символы, не могу сообразить как поменять в строке все совпадения.
[ code ]
#include <stdio.h>
#include <string.h>
char *replace_str(char *str, char *orig, char *rep)
{
static char buffer[4096];
char *p;
if(!(p = strstr(str, orig)))
return str;
strncpy(buffer, str, p-str);
buffer[p-str] = '
Код:
#include <stdio.h>
#include <string.h>
char* str_replace(char* dst, int num, const char* str,
const char* orig, const char* rep){
const char* ptr;
size_t len1 = strlen(orig);
size_t len2 = strlen(rep);
char* tmp = dst;
num -= 1;
while((ptr = strstr(str, orig)) != NULL){
num -= (ptr - str) + len2;
if(num < 1)
break;
strncpy(dst, str, (size_t)(ptr - str));
dst += ptr - str;
strncpy(dst, rep, len2);
dst += len2;
str = ptr + len1;
}
for(; (*dst = *str) && (num > 0); --num){
++dst;
++str;
}
return tmp;
}
int main(void){
char buf[128];
char s[] = "xxx[xxx](xxx),xxxFIN";
str_replace(buf, sizeof(buf)-1, s, "xxx", "Android");
puts(buf);
return 0;
}
#include <string.h>
char* str_replace(char* dst, int num, const char* str,
const char* orig, const char* rep){
const char* ptr;
size_t len1 = strlen(orig);
size_t len2 = strlen(rep);
char* tmp = dst;
num -= 1;
while((ptr = strstr(str, orig)) != NULL){
num -= (ptr - str) + len2;
if(num < 1)
break;
strncpy(dst, str, (size_t)(ptr - str));
dst += ptr - str;
strncpy(dst, rep, len2);
dst += len2;
str = ptr + len1;
}
for(; (*dst = *str) && (num > 0); --num){
++dst;
++str;
}
return tmp;
}
int main(void){
char buf[128];
char s[] = "xxx[xxx](xxx),xxxFIN";
str_replace(buf, sizeof(buf)-1, s, "xxx", "Android");
puts(buf);
return 0;
}
проверка кода
Прикрепил изображением.
Спасибо, работает)!