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
Ir a la versión completa