| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
dark100s
Registrado: 21 Nov 2009 Mensajes: 2 Ubicación: México
| Publicado: 03/11/2011 10:20 am | | | Título: Ayuda con algoritmo de comparacion |
| Tengo un problema con este algoritmo explico rápido su función, por medio del pseudocódigo: Se captura el numero de caracteres: 7 Se ingresa uno por uno los caracteres: a | b | c | e | d | e | f | Se ingresa la cantidad de caracteres que se desea buscar: 2 Se ingresa uno por uno los caracteres: e | f | Inicia la comparación de los caracteres: e != a e != b e != c e = e <- Como 'e' es igual 'e' el contador queda en c=1 f != d <- 'f' es diferente 'd', el contador queda c=0 (los caracteres buscados deben ser continuos de lo contrario el contados vuelve a ser cero) e = e <- Como 'e' es igual 'e' el contador queda en c=1 f = f <- 'f' igual 'f', el contador queda c=2. si 2 = 2 Imprime “tu patrón esta en la cadena”. De lo contrario imprime "Tu patrón no esta en la cadena"
Les dejo mi algoritmo:
#include <stdio.h> #include <stdlib.h>
int main(){
/*Declaracion de la variablea a ocupar*/ char *cadena, *patron; int m,n,d,e,z=0; int si;
/*Inicio de los procesos*/ printf("Tamaño de tu cadena ");//cadena scanf("%d",&m);
if(m>0) cadena=(char*)malloc(sizeof(char)*m);
else{
return 0; }
for(d=0;d<m;d++){
printf("Elemento de tu cadena "); fflush(stdin); scanf("%c",&cadena[d]); printf("[%d]%c \n", d, cadena[d]); }
printf("Tamaño del patron ");//patron fflush(stdin); scanf("%d",&n);
if(n>0) patron=(char*)malloc(sizeof(char)*n);
else return 0;
for(e=0;e<n;e++){
printf("Elemento de tu patron"); fflush(stdin); scanf("%c",&cadena[e]); printf("[%d]%c \n", e, cadena[e]); }
e=0;
for(d=0;d<m;d++){ /*Pienso que mi problema esta en la comparación de los caracteres */ if(cadena[d]==patron[e]){
e++; z++; }
else{
e=0; z=0; } }
if(z==n) printf("Tu patron si esta en la cadena");
else printf("Tu patron no esta en la cadena %d, %d",z ,n);
free(cadena); free(patron); system("PAUSE"); return 0; }
De antemano gracias por su ayuda. _________________ El conocimiento es para todos por igual !!!!!!!!!!!!!!!!!!!!!!!!! |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 7516 Ubicación: Mexico
| Publicado: 03/11/2011 6:33 pm | | | Título: |
| El problema es, como comentas, el bucle del programa. En este solo comparas el carácter actual con el correspondiente en el patrón a buscar.
Deberías tener dos bucles anidados, uno para procesar cada carácter y otro para verificar si a partir de ahí coincide la secuencia.
De esta forma:
| Código: | #include <stdio.h> #include <stdlib.h>
int main (void) { char cadena[] = {'a', 'b', 'c', 'e', 'd', 'e', 'f'}; char patron[] = {'e', 'f'}; int long_cadena = (int) sizeof cadena; int long_patron = (int) sizeof patron; int i; int j; puts("Elementos de la cadena"); for (i = 0; i < long_cadena; i++) printf("cadena[%d] == \'%c\'\n", i, cadena[i]); puts("Elementos del patron"); for (i = 0; i < long_patron; i++) printf("patron[%d] == \'%c\'\n", i, patron[i]); putchar('\n'); for (i = 0; i < long_cadena - (long_patron - 1); i++){ for (j = 0; j < long_patron; j++) if (cadena[i + j] != patron[j]) break; if (j == long_patron) break; } if (j == long_patron) printf("Patron encontrado, inicia en %d\n", i); else puts("Tu patron no esta en la cadena"); return EXIT_SUCCESS; } |
Y deberías evitar el uso de "fflush(stdin)" ya que no es valido en C (fflush solo debe utilizarse con streams de salida mientras que stdin es uno de entrada).
Un saludo _________________ C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language |
| | Volver arriba | |  | dark100s
Registrado: 21 Nov 2009 Mensajes: 2 Ubicación: México
| Publicado: 12/11/2011 9:18 pm | | | Título: Gracias rir3760 |
| Gracias rir3760, lo he probado y funciona al 100%. _________________ El conocimiento es para todos por igual !!!!!!!!!!!!!!!!!!!!!!!!! |
| | 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
|
|
| |