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?