| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
oldfox64

Registrado: 29 Jun 2008 Mensajes: 60 Ubicación: CAT
| Publicado: 17/12/2010 7:37 am | | | Título: Problema de buscar la subsecuencia |
| Hola, ando un poco perdido con éste problema...
En C.
-Entrada: 2 cadenas (secuencia de caracteres) de longitud L, terminadas en punto. -Salida: Mensaje por pantalla que indique si la cadena 2 es una subsecuencia de cadena 1 o no.
Ésto es lo que tengo:
| Código: | #include <stdio.h> #include <string.h> #define L 20 int main(){ char c1[L+1], c2[L+1]; //cadenas char c; //lector int i, j; //contadores
printf("Cadena 1 (acabada en punto):\n"); c=getchar(); i=0; while(c!='.' && i<L){ c1[i]=c; c=getchar(); i++; } c1[i]='\0';
printf("Cadena 2 (acabada en punto):\n"); c=getchar(); j=0; while(c!='.' && j<L){ c2[j]=c; c=getchar(); j++; } c2[j]='\0'; //algoritmo subsecuencia
return 0; }
|
Intuyo que tengo que declarar una variable para guardar la longitud de la cadena 2 (long=strlen(c2)), pues con ésta longitud tengo que comparar con cadena 1.
Por ejemplo: c1 = aabba. c2 = ba.
entonces tendría que hacer un bucle y que se vaya comparando c2 con c1 de 2 en 2,
ba != aa ba != ab ba != bb ba == ba //sale del bucle
Sugerencias? 
s2. _________________ "Construir el futuro y preservar el pasado, es lo mismo" - S.S |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 6586 Ubicación: Mexico
| Publicado: 21/12/2010 10:01 am | | | Título: |
| Si es una tarea depende de los requisitos que te hayan impuesto.
Si puede utilizarse la biblioteca estandar de C sin restricciones basta con utilizar:
1) fgets para leer las dos cadenas
2) strchr para detectar el '.' punto que las termina, este lo sustituyes por el caracter '\0' para truncar las cadenas.
3) Utilizas la funcion strstr en la forma:
| Código: | char cad1[N]; /* cadena */ char cad2[N]; /* subcadena */
/* ... */
if (strstr(cad1, cad2) != NULL){ /* cad2 es parte de cad1 */ }else { /* cad2 no se encuentra en cad1 */ } |
Y listo
Si la idea de la asignatura es practicar entonces debes crear tus propias funciones, no es dificil. En el caso de strstr lo que debes hacer es:
1) Verifica que la longitud de la subcadena sea igual o menor que la cadena "principal".
2) Revisas si la cadena secundaria se encuentra en la principal mediante dos bucles.
Un codigo fuente de ejemplo es:
| Código: | #include <stdio.h> #include <stdlib.h>
int strlen(char *s); char *strstr(char const *s, char const *t);
int main(void) { char s[] = "Esta es solo una cadena de prueba"; char a[] = "Esta"; char b[] = "rir3760"; printf("\"%s\" ", a); if (strstr(s, a) == NULL) printf("NO "); printf("se encuentra en \"%s\"\n", s); printf("\"%s\" ", b); if (strstr(s, b) == NULL) printf("NO "); printf("se encuentra en \"%s\"\n", s); return EXIT_SUCCESS; }
int strlen(char *s) { int i; for (i = 0; s[i] != '\0'; i++) ; return i; }
char *strstr(char const *s, char const *t) { int long_s; int long_t; int i; int j; long_s = strlen(s); long_t = strlen(t); if (long_s >= long_t) for (i = 0; i <= long_s - long_t; i++){ for (j = 0; j < long_t; j++) if (s[i + j] != t[i + j]) break; if (j == long_t) return (char *) (t + i); } return NULL; } |
Un saludo _________________ Memory never recaptures reality. Memory reconstructs. All reconstructions change the original, becoming external frames of reference that inevitably fall short. -- Mentat Handbook |
| | Volver arriba | |  | oldfox64

Registrado: 29 Jun 2008 Mensajes: 60 Ubicación: CAT
| Publicado: 22/12/2010 1:54 pm | | | Título: |
| Gracias  _________________ "Construir el futuro y preservar el pasado, es lo mismo" - S.S |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |