Programación General > C/C++

 ¿Que sucede aquí?

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa