Programación General > C/C++
¿Que sucede aquí?
crixxus:
Hola, espero que esten bien. miren tengo algunas dudas con respecto al siguiente código, las verán a modo de comentario.
--- Código: C++ ---void cadincad(char*ptrcad1,char*ptrcad2)// muestra en pantalla si una cadena esta contenida en la otra; int main(){ char cad1[50]; char cad2[50]; int rtrn,resp; do{ cout<<"Escriba una cadena: "; gets(cad1); cout<<"nEscriba otra cadena: "; gets(cad2); cadincad(cad1,cad2);//llama a la funcion do{ cout<<"n¿Desea comparar otras dos cadenas? (si=1 no=0) "; cin>>resp; }while(resp!=0&&resp!=1); fflush(stdin); }while(resp==1);} void cadincad(char*ptrcad1,char*ptrcad2){ char ref['N']; long N; int i=0,j=0,r=0; if(strlen(ptrcad1)>strlen(ptrcad2)){ while(ptrcad2[i]!=''){ for(j=0;j<strlen(ptrcad1);j++){ if(ptrcad2[i]!=ptrcad1[j]){ ref[r]=ptrcad2[i]; r++;break; } } i++; } ref[r]=''; i=0; if(ref[i]==ptrcad2[i])// si no le pongo el subindice no lo valida, por que? cout<<"n"<<ptrcad2<<" esta contenida en "<<ptrcad1; else cout<<"nNinguna cadena contiene a la otra"; } i=0; r=0; if(strlen(ptrcad1)<strlen(ptrcad2)){ N=strlen(ptrcad1); while(ptrcad1[i]!=''){ for(j=0;j<strlen(ptrcad2);j++){ if(ptrcad1[i]!=ptrcad2[j]){ ref[r]=ptrcad1[i]; r++;break; } } i++; } ref[r]=''; i=0; if(ref==ptrcad2)// aca si lo valida sin el subindice cout<<"n"<<ptrcad1<<" esta contenida en "<<ptrcad2; else cout<<"nNinguna cadena contiene a la otra"; cout<<"n"<<ref;// por que no lo imprime? cout<<"n"<<ptrcad1;// por que no lo imprime? } if(ptrcad1==ptrcad2)// por que no lo valida? cout<<"Las cadenas son iguales"; }
Les agradezco de antemano su ayuda
m0skit0:
Para eso ya tienes la función strstr(). Mi consejo es que ya que estás usando C++, que uses la clase estándar string.
Y por favor, deja un poco de espacios en tú código, no sirve de nada poner todo pegao sino para hacerlo más ilegible. No cuesta nada dejar espacios y ayuda a leer el código. Ah, y comenta un poco más tu código, por lo menos qué hace cada función.
crixxus:
--- Cita de: "crixxus" ---
--- Código: C++ ---void cadincad(char*ptrcad1,char*ptrcad2)// muestra en pantalla si una cadena esta contenida en la otra; int main(){ char cad1[50]; char cad2[50]; int rtrn,resp; do{ cout<<"Escriba una cadena: "; gets(cad1); cout<<"nEscriba otra cadena: "; gets(cad2); cadincad(cad1,cad2);//llama a la funcion do{ cout<<"n¿Desea comparar otras dos cadenas? (si=1 no=0) "; cin>>resp; }while(resp!=0&&resp!=1); fflush(stdin); }while(resp==1);} void cadincad(char*ptrcad1,char*ptrcad2){ char ref['N']; long N; int i=0,j=0,r=0; if(strlen(ptrcad1)>strlen(ptrcad2)){ while(ptrcad2[i]!=''){ for(j=0;j<strlen(ptrcad1);j++){ if(ptrcad2[i]!=ptrcad1[j]){ ref[r]=ptrcad2[i]; r++;break; } } i++; } ref[r]=''; i=0; if(ref[i]==ptrcad2[i])// si no le pongo el subindice no lo valida, por que? cout<<"n"<<ptrcad2<<" esta contenida en "<<ptrcad1; else cout<<"nNinguna cadena contiene a la otra"; } i=0; r=0; if(strlen(ptrcad1)<strlen(ptrcad2)){ N=strlen(ptrcad1); while(ptrcad1[i]!=''){ for(j=0;j<strlen(ptrcad2);j++){ if(ptrcad1[i]!=ptrcad2[j]){ ref[r]=ptrcad1[i]; r++;break; } } i++; } ref[r]=''; i=0; if(ref==ptrcad2)// aca si lo valida sin el subindice cout<<"n"<<ptrcad1<<" esta contenida en "<<ptrcad2; else cout<<"nNinguna cadena contiene a la otra"; cout<<"n"<<ref;// por que no lo imprime? cout<<"n"<<ptrcad1;// por que no lo imprime? } if(ptrcad1==ptrcad2)// por que no lo valida? cout<<"Las cadenas son iguales"; }
Les agradezco de antemano su ayuda
--- Fin de la cita ---
bueno ya separe un poco el codigo ahora por favor respondeme las preguntas que estan a modo de comentario en el codigo
a343:
Si utilizas un vector de caracteres (char *) deberias utilizar para comparar cadenas strcmp, y no puedes comparar una cadena con un caracter, creo que deberias utilizar string como te dijeron antes, te quitas de tener que utilizar todas esas funciones para comparar y demas...
m0skit0:
Me refiero a que cadincad() sobra porque es lo mismo que la función estándar strstr(). Aparte para comparar dos cadenas tienes que usar strcmp() como te comentan.
Igualmente, insisto: usa string.
Navegación
[#] Página Siguiente
Ir a la versión completa