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++; } } }

Rispondi quotando