Programación General > C/C++

 Duda - Una cadena contenida en otra

(1/1)

Carlota:
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:


--- Código: C++ ---#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 correcta
Y luego escribo:
es correcta

Me 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:

entrada

Me 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?

rfog:
Usa la función strstr() de C, que te devuelve un puntero a la posición de la segunda cadena respecto a la primera. Luego restas los punteros y tienes la posición.

Carlota:
No puedo usar dicha funcion, ya que necesito saber hacerlo sin usar string.h
Ademas, el problema es que si continua leyendo y acaba la segunda cadena deberia decir que esta contenida en la primera y no es asi...

Navegación

[0] Índice de Mensajes

Ir a la versión completa