Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Си, как заменить все совпадения подстроки в строке.

88K
19 сентября 2014 года
Jironimo
3 / / 19.09.2014
Привет :)
Есть код меняющий подстроку первое найденное её вхождение в строке на нужные символы, не могу сообразить как поменять в строке все совпадения.
[ 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] = '
11K
19 сентября 2014 года
xAtom
65 / / 17.01.2011
Код:
#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;
}
По-идеи лучше использовать динамический буфер, чтобы не боятся перевалить за границу размера буфера.
проверка кода
88K
19 сентября 2014 года
Jironimo
3 / / 19.09.2014
Почемуто код криво вставился.
Прикрепил изображением.
88K
22 сентября 2014 года
Jironimo
3 / / 19.09.2014
Спасибо, работает)!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог