Foros del Web » Programación para mayores de 30 ;) » C/C++ »

comparar cadenas en C

Estas en el tema de comparar cadenas en C en el foro de C/C++ en Foros del Web. muy buenas, estaba haciendo una funcion en C que me compara 2 cadenas entradas desde teclado. el problema es que me dice siempre que son ...
  #1 (permalink)  
Antiguo 27/05/2012, 12:48
 
Fecha de Ingreso: mayo-2012
Mensajes: 60
Antigüedad: 11 años, 11 meses
Puntos: 0
Pregunta comparar cadenas en C

muy buenas, estaba haciendo una funcion en C que me compara 2 cadenas entradas desde teclado.
el problema es que me dice siempre que son iguales
codigo:
Código C:
Ver original
  1. #include<stdio.h>
  2. #define MAX 20
  3.  
  4.  
  5. int comparaCad(char cad1[MAX],char cad2[MAX]);
  6.  
  7.  
  8. int main(){
  9.   char cad1[MAX],cad2[MAX];
  10.   int result;
  11.  
  12.   printf("introduzca 1 cadena:\n");
  13.   scanf("%s",cad1);
  14.   printf("introduzca 1 cadena:\n");
  15.   scanf("%s",cad2);
  16.  
  17.   result = comparaCad(cad1,cad2);
  18.  
  19.   if(result==0)
  20.     printf("cadenas iguales\n");
  21.   else{
  22.     if(result<0)
  23.       printf("cad1 es menor que cad2\n");
  24.     else
  25.       printf("cad1 es mayor que cad2\n");
  26.   }  
  27.  
  28.   return 0;
  29. }
  30.  
  31. int comparaCad(char cad1[MAX],char cad2[MAX]){
  32.   int i,comp,j;
  33.   char c1,c2;
  34.  
  35.   for(i=0,j=0; cad1[j]==cad2[i] && i<MAX && cad1[j]!='\0' && cad2[i]!='\0';++i,++j){
  36.     c1 = cad1[j];
  37.     c2 = cad2[i];
  38.   }
  39.  
  40.   if(c1 == '\0' && c1!=c2)
  41.     comp=-1;
  42.   else{
  43.     if(c2=='\0' && c2!=c1)
  44.       comp=1;
  45.     else{  
  46.   if(c1 == c2)
  47.     comp=0;
  48.   else{
  49.     if(c1 < c2)
  50.       comp=-1;
  51.     else
  52.       comp=1;
  53.   }
  54.     }
  55.   }
  56.  
  57.   return comp;
  58. }
  #2 (permalink)  
Antiguo 27/05/2012, 15:28
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: comparar cadenas en C

Hola! en el for tenes algunas condiciones de mas, i<MAX no es necesario.
Tenes q usar cad1[j]!='\0' o cad2[j]!='\0' no es necesario las dos juntas..
Pero el error del porque siempre te da que las cadenas son iguales es por usar c1 y c2. Cuando las cadenas son distintas la condicion del for es falso por lo que c1 y c2 siguen teniendo los mismos caracteres del ciclo anterior, por lo tanto siempre van a seguir siendo iguales. Para resolver esto tenes que usar directamente cad1[j] y cad2[i] en los if
Otra cosa q esta demas es usar dos subindices, con uno solo para los dos arreglos alcanza

Saludos
  #3 (permalink)  
Antiguo 27/05/2012, 16:33
Avatar de W_NEMESIS  
Fecha de Ingreso: mayo-2012
Ubicación: pasto
Mensajes: 25
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: comparar cadenas en C

prueba este codigo, es mas eficiente y mas corto


Código c++:
Ver original
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. #include "adjunto.h"
  8.  
  9. char fra[100],frad[100];
  10. int x,r,v;
  11.  
  12. int main(int argc, char *argv[])
  13. {  
  14.     cout<<"primera frase: "<<endl;
  15.     cin.getline(fra,100);
  16.     strupr(fra);
  17.    
  18.     cout<<endl<<"frase a buscar dentro de la primera frase: "<<endl;
  19.     cin.getline(frad,100);
  20.     strupr(frad);
  21.     int v=strlen(frad);
  22.     x=comparar(fra,frad,x);
  23.     system("cls");
  24.     if (x>=0)
  25.     {
  26.     cout<<"La Palabra Fue Encontrada en las Posiciones: ";
  27.     for (r=0;r<v;r++) cout<<x+(r+1)<<" ";
  28. }
  29.     else cout<<"La Palabra no Fue Encontrada"<<endl;
  30.     cout<<endl<<endl;
  31.    
  32.     system("PAUSE");
  33.     return EXIT_SUCCESS;
  34. }

no te olvides de calificar y de pedir explicaion si hace falta

Última edición por W_NEMESIS; 27/05/2012 a las 16:35 Razón: error de digitacion

Etiquetas: cadenas, compara, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:30.