Você tem razão nesse questionamento, mas tal complicação já estava prevista quando fiz o programinha, ficando, por assim dizer, a cargo do usuário sanar eventuais dificuldades quejandas. Por ex., para alterar a segunda substring "AA" na string por você dada, o usuário deveria pesquisar por " 123 AA" e substituir isso por " 123 CCC". Claro que casos como substituir o terceiro '1' de "111" por '0', isto é, "111" para "110", a pesquisa acaba tendo de usar a string inicial inteira.
Seja como for, segue um código que penso resolva isso a contento. Caso tenha alternativa melhor, por favor, aponte-a.
Abraços.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
main()
{
char TextInic[1000], TextFin[1000], SubTextExcl[1000], SubTextIncl[1000];
char* pt;
int i, j, ocor, count;
while(1)
{
printf("\n\n Digite o texto ou 0 para sair: "); gets(TextInic); fflush(stdin);
if(strcmp(TextInic, "0") == 0)
break;
printf("\n Digite o subtexto a ser excluido: "); gets(SubTextExcl); fflush(stdin);
printf("\n Digite qual repeticao do subtexto a excluir (1, 2, ...): ");
scanf("%d", &ocor); fflush(stdin);
count = 1;
pt = strstr(TextInic, SubTextExcl);
while((++count <= ocor)&&(pt != NULL))
pt = strstr(pt + strlen(SubTextExcl), SubTextExcl);
if(pt)
{
printf("\n Digite o subtexto a ser incluido: "); gets(SubTextIncl); fflush(stdin);
i = 0;
while(&TextInic[i] != pt)
{
TextFin[i] = TextInic[i];
i++;
}
j = 0;
while(SubTextIncl[j])
TextFin[i++] = SubTextIncl[j++];
for(j = strlen(TextInic) + strlen(SubTextExcl) - strlen(pt); j <= strlen(TextInic); i++, j++)
TextFin[i] = TextInic[j];
printf("\n\n O texto ficou assim: %s", TextFin);
}
else
printf("\n O subtexto a ser excluido nao esta contido no texto.\n");
}
printf("\n\nFIM DO PROGRAMA");
}
↧