Hola! Paso por aqui porque tengo problemas con un algortimo... Dejo el enunciado y os explico lo que me ocurre:
Comprobar si una cadena esta contenida en otra y, si fuera asi, indicar la posicion del primer caracter.
USAR: int buscar_cadena(char *cad1, char *cad2)El codigo que he hecho:
#include <stdio.h>
#include <stdlib.h>
#define TAM 100
char strsub(char *c1, char *c2);
int buscar_cadena(char *c1, char *c2);
void leer_cadena(char cad[]);
int main(){
char c1[TAM],c2[TAM];
int res;
leer_cadena(c1);
leer_cadena(c2);
res=strsub(c1, c2);
if(res==0) puts("Las cadenas son iguales (ambas incluidas una en otra)");
else if(res==1) puts("Primera cadena incluida en segunda");
else if(res==2) puts("Segunda cadena incluida en primera");
else if(res==3) puts("Las cadenas no estan incluidas ninguna en otra");
system("PAUSE");
return 0;
}
//Cabecera: char strsub(char *c1, char *c2);
//Precondicion:Dos cadenas inicializadas
//Postcondicion: Devuelve si una cadena esta contenida en otra y viceversa
char strsub(char *c1, char *c2){
int c2enc1, c1enc2;
c2enc1= buscar_cadena(c1,c2);
c1enc2= buscar_cadena(c2,c1);
if(c2enc1==-1)
if(c1enc2==-1){
return 3;
} /* no hay inclusiones */
else return 1; /*c1 incluida en c2*/
if(c1enc2==-1){
return 2;
} /*c2 incluida en c1 */
return 0; /* c1 y c2 son iguales */
}
//Cabecera: int buscar_cadena(char *c1, char *c2);
//Precondicion:Dos cadenas inicializadas
//Postcondicion: Posicion de una en otra
int buscar_cadena(char c1[], char c2[]){
int pos=0;
int i;
while(1){
for(i=0;c1[pos+i]!=' ' && c2[i]!=' ';i++)
if(c1[pos+i]!=c2[i]) break;
if(c2[i]==' ') return pos;
if(c1[pos+i]==' '){
printf("El primer caracter se encontro en la posicion %in",pos+1);
return -1;
}
pos++;
}
}
//Cabecera: leer_cadena(char cad[])
//Precondicion: cad inicializada
//Postcondicion: lee una cadena
void leer_cadena(char cad[]){
int i;
puts("Introduce cadena y pulsa ENTER para terminar la cadena");
fgets(cad, 100, stdin);
fflush(stdin);
}
Lo que me ocurre esque si por ejemplo introduzco:
Esta entrada es correctaY luego escribo:
es correctaMe da la posicion y me indica que la segunda cadena esta contenida en la primera... bien hasta aqui, pero si en la segunda cadena escribo esto:
entradaMe indica que ninguna cadena esta contenida una en otra y las posiciones salen erroneas...
Alguien podria decirme donde esta fallando y que podria hacer para arreglarlo?