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.

Resposta