PDA

Visualizza la versione completa : [C] Ricerca in stringa e sostituzione


whiterich86
18-02-2010, 18:14
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

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

Loading