/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Problema de buscar la subsecuencia

 
      Índice del Foro elrincondelc.com -> Algoritmos
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
oldfox64



Registrado: 29 Jun 2008
Mensajes: 60
Ubicación: CAT

MensajePublicado: 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? Confused

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

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

MensajePublicado: 22/12/2010 1:54 pm
Título:

Gracias Wink
_________________
"Construir el futuro y preservar el pasado, es lo mismo" - S.S
Volver arriba
      Índice del Foro elrincondelc.com -> Algoritmos
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com