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?