#include <stdio.h> #include <conio.h>
/* Halla la longitud de una cadena, hace las veces de strlen */ int longitud(char *cadena) { int i; for(i=0; ;i++) if(cadena[i]=='\0') break; return i; }
/* Halla la posicion de aparicion de una subcadena en una cadena */ int posicion(char *cadena, char *subcadena) { int i, j;
for(i=0; i<longitud(cadena); i++) { if(cadena[i]==subcadena[0]) { if(longitud(cadena)-i < longitud(subcadena)) return -1;
for(j=0; j<longitud(subcadena); j++) { if(cadena[i+j]!=subcadena[j]) break; } if(j==longitud(subcadena)) return i; } }
return -1; }
/* Busca una subcadena en una cadena, y la reemplaza por otra; retorna el numero de veces que se hizo el reemplazo */ int reemplazar(char *cadena, char *subcadena, char *reemplazo) { int ocurrencias = 0; int i, indice, posiciones, temp, l_cadena, l_subcadena, l_reemplazo;
l_cadena = longitud(cadena); l_reemplazo = longitud(reemplazo); l_subcadena = longitud(subcadena);
for(;;) { indice = posicion(cadena, subcadena); if(indice==-1) break; else { for(i=indice; i<indice+l_reemplazo; i++) cadena[i]=reemplazo[i-indice];
/* Si la longitud del reemplazo es menor que la de la subcadena, recorre caracteres siguientes, posiciones a la izquierda */ posiciones=l_subcadena-l_reemplazo; if(posiciones>0) for(temp=i; temp<=l_cadena; temp++) cadena[temp]=cadena[temp+posiciones];
ocurrencias++; } }
return ocurrencias; }
void main() { clrscr(); char *cadena="Hola esto es una prueba"; char *subcadena="es"; char *reemplazo="Z";
printf("Cadena original: %s\n", cadena); printf("Buscar: %s\n", subcadena); printf("Reemplazo: %s\n\n", reemplazo);
int temp=reemplazar(cadena, subcadena, reemplazo);
printf("Coincidencias: %d\n", temp); printf("Cadena resultante: %s", cadena); getch(); }
|