Salve ho un problema la mia risoluzione nn funziona perchè non può sostituire una parola con una più lunga
testo:scrivere una function che sostituisca in un testo tutte le occorenze di una data sottostringa S1 con una altra S2 le due sottostringhe possono avere anche lunghezze diverse
codice:
     /*Esercizio 24a*/
/*scrivere una function C che sostituisca in un testo tutte le occorrenze di una data sottostringa S1 con un’altra S2*/
/*(le due sottostringhe possono avere anche lunghezze diverse)*/
/*Versione con Allocazione Statica*/

#include<stdio.h>
#include<string.h>

void elimina(char stringa[],char sotto[],char nuova[],short int *flag); //Prototipo di funzione :
//Parametri rispettivamente: il testo inserito,la parola da cercare,la parola da inserire,variabi-
//le di controllo

void main()
{
	char stringa[1000]; 
	char sotto[100];
	char nuova[100];
	short int flag = 0; //Segnalatore.
						
	printf("\t  ***** Sostituzione di una sottostringa in un testo *****\n\n");
	puts("Inserire Testo: ");				//Inserimento Dati
	gets(stringa);
	puts("\nInserire la parola da cercare: ");
	gets(sotto);
	puts("\nInserire la parola da inserire: ");
	gets(nuova);

	elimina(stringa,sotto,nuova,&flag);	//Chiamata di Funzione

	if ( flag == 0 ){		//Stampa
		printf("\nParola non Trovata! \n\n");
	}

	else {
	printf("\n   <------------------------------------------------------------> \nTesto con la nuova parola : \n");
	puts(stringa);
	puts(" ");
	}
	system("PAUSE");
}

void elimina(char stringa[],char sotto[],char nuova[],short int *flag)
{

	short int i=0,j=0,z=0,size,dim,contatore = 0,limite;

	size = strlen(sotto);  //Si memorizzano in queste due variabili la lunghezza del testo e della
	dim = strlen(stringa); //parola in modo da ottimizzare i due cicli while.

	while ( i < dim ){					//Si cerca la sottostringa
		if ( stringa[i] == sotto[j] ){
			i++;
			j++;
			contatore++;

			if ( contatore == size ) {  //Se le dimensioni coincidono
				limite = i;
				i -= contatore;			//Si individua la posizione
				*flag = 1;

				while ( i < limite ) {	//E si esegue la sostituzione
					stringa[i] = nuova[z++];
					i++;
				}
			}
		}
		else {							//Altrimenti si procede nella ricerca
			j = 0;
			z = 0;
			contatore = 0;
			i++;
		}
	}
}