1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

strreplace em C

Discussão em 'Programação' iniciada por r3pek, 6 de Novembro de 2007. (Respostas: 6; Visualizações: 1407)

  1. r3pek

    r3pek Power Member

    bem, andei à procura na net de um códigozinho k fizesse akela função. como não encontrei nada decidi fazer eu e partilha-la com o resto do pessoal para k se altem precisar da função como eu e não a encontrar, já tem aki uma ajuda.
    Se o pessoal encontrar algum problema ou kiser alterar/acrescentar algo é na boa, esta é só a solução k eu arranjei.

    Aki fica:
    Código:
    #include <string.h>
    #include <stdlib.h>
    
    unsigned char* strreplace(unsigned char* str_in, unsigned char* str_find, unsigned char* str_subst) {
            unsigned char* subst_pos = strstr(str_in, str_find);
    
            if (subst_pos == NULL)
                    return NULL;
    
            unsigned char* result = calloc(strlen(str_in) - strlen(str_find) + strlen(str_subst) + 1, sizeof(unsigned char));
            strncpy(result, str_in, subst_pos - str_in);
            strcat(result, str_subst);
            strcat(result, str_in + (subst_pos - str_in) + strlen(str_find));
    
            return result;
    }
    
    axo k é facil perceber mas se tiver duvidas avisem.
     
  2. PrOdG

    PrOdG Power Member

    Com um sprintf podias poupar uma ou duas linhas de código, mas se está a funcionar.. ;)

    Pensaste no caso em que existe mais que um needle na haystack, ou para o que precisas assumes que não existe?
     
  3. r3pek

    r3pek Power Member

    só substitui o primeiro k encontra.... se calhar era fixe fazer para todos os possiveis :S k axas?
     
  4. PrOdG

    PrOdG Power Member

    Não deve ser muito difícil de implementar utilizando recursividade.
     
  5. r3pek

    r3pek Power Member

    a pedido de muitas familias..... :)


    Código:
    #include <string.h>
    #include <stdlib.h>
    
    unsigned char* strreplace(unsigned char* str_in, unsigned char* str_find, unsigned char* str_subst) {
            unsigned char* subst_pos = strstr(str_in, str_find);
    
            if (subst_pos == NULL)
                    return str_in;
    
            unsigned char* result = calloc(strlen(str_in) - strlen(str_find) + strlen(str_subst) + 1, sizeof(unsigned char));
            strncpy(result, str_in, subst_pos - str_in);
            strcat(result, str_subst);
            strcat(result, str_in + (subst_pos - str_in) + strlen(str_find));
    
            return strreplace(result, str_find, str_subst);
    }
    
    
    alteração muito pequenina como se pode ver...
     
  6. AliFromCairo

    AliFromCairo Power Member

    Código:
    strreplace("AXA", "", "A");
    
    :007:.
     
  7. r3pek

    r3pek Power Member

    as vezes ler as man pages ajuda ;) obrigado!

    versão corrigida:

    Código:
    #include <string.h>
    #include <stdlib.h>
    
    unsigned char* strreplace(unsigned char* str_in, unsigned char* str_find, unsigned char* str_subst) {
            unsigned char* subst_pos = strstr(str_in, str_find);
    
            if ((subst_pos == NULL) || (strcmp(str_find, "") == 0))
                    return str_in;
    
            unsigned char* result = calloc(strlen(str_in) - strlen(str_find) + strlen(str_subst) + 1, sizeof(unsigned char));
            strncpy(result, str_in, subst_pos - str_in);
            strcat(result, str_subst);
            strcat(result, str_in + (subst_pos - str_in) + strlen(str_find));
    
            return strreplace(result, str_find, str_subst);
    }
     

Partilhar esta Página