Implemente a seguinte função:
char * StrDelStr(char *s1, char *s2)
Apaga em s1 a primeira ocorrência de s2.
Exemplo: (execução da função a partir da mesma string original)
char *s = “O rato roeu a rolha da garrafa de rum do rei da Rússia”
StrDelStr(s, “xy”);→ “O rato roeu a rolha da garrafa de rum do rei da Rússia”
StrDelStr(s, “ra”);→ “O to roeu a rolha da garrafa de rum do rei da Rússia”
Passo 1
Fala aí! Essa aqui parece um pouquinho complicada, né? Mas relaxa que vai ficar bem tranquilo quando usarmos alguns macetes.
Se liga em como vamos começar:
Declaramos as variáveis pula, que será responsável por pular ou excluir a substring da string principal, len é definida como o comprimento da string s2, o ponteiro para char s_final será a string que retornaremos como resultado, por ora a definimos como igual à s1, e s2_em_s1 é definida com ajuda da função strstr, que nos devolve a ocorrência da string s2 em s1.
Passo 2
Feito isso, prosseguimos assim:
Abrimos um laço for um pouco diferente do que estamos acostumados. Olha só, a primeira parte, a inicialização do for, fica em branco porque s1 já foi inicializada anteriormente. Além disso, na última parte, o incremento, temos duas instruções, isso quer dizer que ambas serão executadas uma vez a cada nova iteração.
Em seguida, iniciamos uma condição if, que vai analisar cada endereço de s1 (pois está dentro do for) e compará-los com os de s2_em_s1. Caso a comparação seja verdadeira, atribuímos ao valor de pula o de len. Ao fazer isso, como estamos atualizando *s1 = *(s1 + pula) a cada iteração, estamos efetivamente pulando os caracteres de s2 que existem em s1!
Para finalizar, basta retornarmos o valor de s_final, para podermos obter a string resultante quando chamarmos a função StrDelStr lá no main.