• Sábado 14 de Diciembre de 2024, 17:39

Autor Tema:  ¿Que sucede aquí?  (Leído 1966 veces)

crixxus

  • Nuevo Miembro
  • *
  • Mensajes: 19
  • Nacionalidad: co
    • Ver Perfil
¿Que sucede aquí?
« en: Miércoles 9 de Marzo de 2011, 03:23 »
0
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++
  1. void cadincad(char*ptrcad1,char*ptrcad2)// muestra en pantalla si una cadena esta contenida en la otra;
  2.  
  3. int main(){
  4.    
  5.     char cad1[50];
  6.     char cad2[50];
  7.     int rtrn,resp;
  8.    
  9.     do{
  10.        cout<<"Escriba una cadena: ";
  11.        gets(cad1);
  12.  
  13.        cout<<"nEscriba otra cadena: ";
  14.        gets(cad2);
  15.        
  16.        cadincad(cad1,cad2);//llama a la funcion
  17.        do{
  18.           cout<<"n¿Desea comparar otras dos cadenas? (si=1 no=0) ";
  19.           cin>>resp;
  20.           }while(resp!=0&&resp!=1);
  21.        fflush(stdin);
  22.        }while(resp==1);
  23. }
  24.  
  25. void cadincad(char*ptrcad1,char*ptrcad2){
  26.      
  27.      char ref['N'];
  28.      long N;
  29.      int i=0,j=0,r=0;
  30.      
  31.    
  32.     if(strlen(ptrcad1)>strlen(ptrcad2)){
  33.        while(ptrcad2[i]!=''){
  34.              for(j=0;j<strlen(ptrcad1);j++){
  35.                    if(ptrcad2[i]!=ptrcad1[j]){
  36.                       ref[r]=ptrcad2[i];
  37.                       r++;break;
  38.                    }
  39.              }
  40.              i++;
  41.        }
  42.        ref[r]='';
  43.        i=0;
  44.        if(ref[i]==ptrcad2[i])// si no le pongo el subindice no lo valida, por que?
  45.        cout<<"n"<<ptrcad2<<" esta contenida en "<<ptrcad1;
  46.  
  47.        else cout<<"nNinguna cadena contiene a la otra";
  48.        }
  49.  
  50.  
  51.       i=0;
  52.       r=0;
  53.  
  54.  
  55.      if(strlen(ptrcad1)<strlen(ptrcad2)){
  56.        N=strlen(ptrcad1);
  57.        while(ptrcad1[i]!=''){
  58.              for(j=0;j<strlen(ptrcad2);j++){
  59.                    if(ptrcad1[i]!=ptrcad2[j]){
  60.                       ref[r]=ptrcad1[i];
  61.                       r++;break;
  62.                    }
  63.              }
  64.              i++;
  65.        }
  66.        ref[r]='';
  67.        i=0;
  68.        if(ref==ptrcad2)// aca si lo valida sin el subindice
  69.  
  70.        cout<<"n"<<ptrcad1<<" esta contenida en "<<ptrcad2;
  71.  
  72.        else cout<<"nNinguna cadena contiene a la otra";
  73.  
  74.        cout<<"n"<<ref;// por que no lo imprime?
  75.  
  76.        cout<<"n"<<ptrcad1;// por que no lo imprime?  
  77.                                        
  78.      }
  79.  
  80.      if(ptrcad1==ptrcad2)// por que no lo valida?
  81.         cout<<"Las cadenas son iguales";
  82.  
  83. }
  84.  



Les agradezco de antemano su ayuda
« última modificación: Lunes 14 de Marzo de 2011, 18:36 por crixxus »

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: ¿Que sucede aquí?
« Respuesta #1 en: Miércoles 9 de Marzo de 2011, 09:05 »
0
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

  • Nuevo Miembro
  • *
  • Mensajes: 19
  • Nacionalidad: co
    • Ver Perfil
Re: ¿Que sucede aquí?
« Respuesta #2 en: Lunes 14 de Marzo de 2011, 18:38 »
0
Cita de: "crixxus"
Código: C++
  1. void cadincad(char*ptrcad1,char*ptrcad2)// muestra en pantalla si una cadena esta contenida en la otra;
  2.  
  3. int main(){
  4.    
  5.     char cad1[50];
  6.     char cad2[50];
  7.     int rtrn,resp;
  8.    
  9.     do{
  10.        cout<<"Escriba una cadena: ";
  11.        gets(cad1);
  12.  
  13.        cout<<"nEscriba otra cadena: ";
  14.        gets(cad2);
  15.        
  16.        cadincad(cad1,cad2);//llama a la funcion
  17.        do{
  18.           cout<<"n¿Desea comparar otras dos cadenas? (si=1 no=0) ";
  19.           cin>>resp;
  20.           }while(resp!=0&&resp!=1);
  21.        fflush(stdin);
  22.        }while(resp==1);
  23. }
  24.  
  25. void cadincad(char*ptrcad1,char*ptrcad2){
  26.      
  27.      char ref['N'];
  28.      long N;
  29.      int i=0,j=0,r=0;
  30.      
  31.    
  32.     if(strlen(ptrcad1)>strlen(ptrcad2)){
  33.        while(ptrcad2[i]!=''){
  34.              for(j=0;j<strlen(ptrcad1);j++){
  35.                    if(ptrcad2[i]!=ptrcad1[j]){
  36.                       ref[r]=ptrcad2[i];
  37.                       r++;break;
  38.                    }
  39.              }
  40.              i++;
  41.        }
  42.        ref[r]='';
  43.        i=0;
  44.        if(ref[i]==ptrcad2[i])// si no le pongo el subindice no lo valida, por que?
  45.        cout<<"n"<<ptrcad2<<" esta contenida en "<<ptrcad1;
  46.  
  47.        else cout<<"nNinguna cadena contiene a la otra";
  48.        }
  49.  
  50.  
  51.       i=0;
  52.       r=0;
  53.  
  54.  
  55.      if(strlen(ptrcad1)<strlen(ptrcad2)){
  56.        N=strlen(ptrcad1);
  57.        while(ptrcad1[i]!=''){
  58.              for(j=0;j<strlen(ptrcad2);j++){
  59.                    if(ptrcad1[i]!=ptrcad2[j]){
  60.                       ref[r]=ptrcad1[i];
  61.                       r++;break;
  62.                    }
  63.              }
  64.              i++;
  65.        }
  66.        ref[r]='';
  67.        i=0;
  68.        if(ref==ptrcad2)// aca si lo valida sin el subindice
  69.  
  70.        cout<<"n"<<ptrcad1<<" esta contenida en "<<ptrcad2;
  71.  
  72.        else cout<<"nNinguna cadena contiene a la otra";
  73.  
  74.        cout<<"n"<<ref;// por que no lo imprime?
  75.  
  76.        cout<<"n"<<ptrcad1;// por que no lo imprime?  
  77.                                        
  78.      }
  79.  
  80.      if(ptrcad1==ptrcad2)// por que no lo valida?
  81.         cout<<"Las cadenas son iguales";
  82.  
  83. }
  84.  



Les agradezco de antemano su ayuda

bueno ya separe un poco el codigo ahora por favor respondeme las preguntas que estan a modo de comentario en el codigo

a343

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Re: ¿Que sucede aquí?
« Respuesta #3 en: Martes 15 de Marzo de 2011, 00:34 »
0
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

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: ¿Que sucede aquí?
« Respuesta #4 en: Martes 15 de Marzo de 2011, 10:49 »
0
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.

crixxus

  • Nuevo Miembro
  • *
  • Mensajes: 19
  • Nacionalidad: co
    • Ver Perfil
Re: ¿Que sucede aquí?
« Respuesta #5 en: Miércoles 16 de Marzo de 2011, 01:24 »
0
ok muchas gracias y voy a escuchar tu consejo moskito