elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  cómo comparar una variable string con una cadena en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: cómo comparar una variable string con una cadena en C  (Leído 5,538 veces)
etcheverrypablol

Desconectado Desconectado

Mensajes: 37


¡Hoy mejor que ayer, mañana mejor que hoy!


Ver Perfil
cómo comparar una variable string con una cadena en C
« en: 5 Febrero 2016, 11:56 am »

Chicos, en el siguiente código:

#include <stdio.h>

int main(){
    char mes[20];

    puts("Ingrese el nombre de un mes");
    scanf("%s",&mes);
    if(mes=="enero")
        puts("El mes ingresado es enero");
    return 0;
}

resulta que no es la forma correcta de comparar una variable string con una cadena, ya que no entra en el if. Cuál es el error.


« Última modificación: 5 Febrero 2016, 11:58 am por etcheverrypablol » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: cómo comparar una variable string con una cadena en C
« Respuesta #1 en: 5 Febrero 2016, 12:11 pm »

Tu codigo esta comparando dos direcciones de memoria, tenes que usar funciones de comparacion de cadena como por ejemplo strcmp.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
sodark

Desconectado Desconectado

Mensajes: 81


Ver Perfil WWW
Re: cómo comparar una variable string con una cadena en C
« Respuesta #2 en: 5 Febrero 2016, 12:13 pm »

Acostumbraros a buscar en google... https://www.google.es/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8&client=ubuntu#q=comparar%20string%20c
En línea

etcheverrypablol

Desconectado Desconectado

Mensajes: 37


¡Hoy mejor que ayer, mañana mejor que hoy!


Ver Perfil
Re: cómo comparar una variable string con una cadena en C
« Respuesta #3 en: 5 Febrero 2016, 13:03 pm »

Bueno sí, acepto que no he buscado mucho en google.

Pude encontrar la solución. Hice uso de la funcion strncmp. La encontré por el comentario de Eternal.
De paso comento que el ejercicio que estaba resolviendo es este.

// Escribir un programa que acepte fechas escritas de modo usual y las visualice como tres números. Por ejemplo, la entrada: 15 febrero 2008 producirá la salida 15 2 2008.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(){
  4. int dia;
  5. char mes[20];
  6. int anho;
  7. char ene[]="enero";
  8. char feb[]="febrero";
  9. char mar[]="marzo";
  10. char abr[]="abril";
  11. char may[]="mayo";
  12. char jun[]="junio";
  13. char jul[]="julio";
  14. char ago[]="agosto";
  15. char sep[]="septiembre";
  16. char oct[]="octubre";
  17. char nov[]="noviembre";
  18. char dic[]="diciembre";
  19.  
  20. puts("Ingrese una fecha escrita en modo usual, por ejemplo 7 noviembre 1991.");
  21. scanf("%i %s %i",&dia,&mes,&anho);
  22. if(!(strncmp(mes,ene,20)))
  23. strcpy(mes,"1");
  24. if(!(strncmp(mes,feb,20)))
  25. strcpy(mes,"2");
  26. if(!(strncmp(mes,mar,20)))
  27. strcpy(mes,"3");
  28. if(!(strncmp(mes,abr,20)))
  29. strcpy(mes,"4");
  30. if(!(strncmp(mes,may,20)))
  31. strcpy(mes,"5");
  32. if(!(strncmp(mes,jun,20)))
  33. strcpy(mes,"6");
  34. if(!(strncmp(mes,jul,20)))
  35. strcpy(mes,"7");
  36. if(!(strncmp(mes,ago,20)))
  37. strcpy(mes,"8");
  38. if(!(strncmp(mes,sep,20)))
  39. strcpy(mes,"9");
  40. if(!(strncmp(mes,oct,20)))
  41. strcpy(mes,"10");
  42. if(!(strncmp(mes,nov,20)))
  43. strcpy(mes,"11");
  44. if(!(strncmp(mes,dic,20)))
  45. strcpy(mes,"12");
  46.  
  47. printf("La fecha ingresada es: %d %s %d",dia,mes,anho);
  48. }
  49.  
Me parece que este programa se podría optimizar, pero no concozco de las herramientas para hacerlo aún.
Saludos!
« Última modificación: 5 Febrero 2016, 14:48 pm por Eternal Idol » En línea

fary


Desconectado Desconectado

Mensajes: 1.076



Ver Perfil WWW
Re: cómo comparar una variable string con una cadena en C
« Respuesta #4 en: 5 Febrero 2016, 13:39 pm »

Pues sería así.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.   int dia;
  8.   int anho;
  9.   char mes[20];
  10.   int i =0;
  11.  
  12.   char * meses[12] = {"enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "Octubre", "Noviembre", "diciembre"};
  13.  
  14.   puts("Ingrese una fecha escrita en modo usual, por ejemplo 7 noviembre 1991.");
  15.   scanf("%i %s %i",&dia,&mes,&anho);
  16.  
  17.   for (i = 0; i < 12; i++)
  18.   {
  19. if (strcmp(meses[i], mes) == 0)
  20. {
  21. memset(mes,0,20);
  22. itoa((i+1),mes,10);
  23. break;
  24. }
  25.   }
  26.  
  27.   printf("La fecha ingresada es: %d %s %d",dia,mes,anho);
  28.  
  29.   return 0;
  30. }
En línea

Un byte a la izquierda.
etcheverrypablol

Desconectado Desconectado

Mensajes: 37


¡Hoy mejor que ayer, mañana mejor que hoy!


Ver Perfil
Re: cómo comparar una variable string con una cadena en C
« Respuesta #5 en: 6 Febrero 2016, 15:04 pm »

Hola fary.
Estoy muy agradecido por tu aporte. A raiz del mismo me he puesto a investigar y e aprendido un montón. Me costó mucho entender tu código, ya que contiene funciones que nunca había utilizado.

En este caso, no pude compilarlo, ya que contiene la función itoa. Me tira el error "referencia a itoa sin definir".
Busqué un reemplazo para la misma y me encontré con la función sprintf. El programa quedó así:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
       int dia;
       int anho;
       char mes[20];
       int i =0;
       char * meses[12] = {"enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"};
    
       puts("Ingrese una fecha escrita en modo usual, por ejemplo 7 noviembre 1991.");
       scanf("%i %s %i",&dia,&mes,&anho);
    
       for (i = 0; i < 12; i++)
       {
          if (strcmp(meses, mes) == 0)
          {
             memset(mes,0,20);
             sprintf(mes,"%i",i+1);
             break;
          }
       }
    
       printf("La fecha ingresada es: %d %s %d",dia,mes,anho);
    
       return 0;
    }

Luego, analizando un poco más, me di cuenta de que no hacía falta utilizar la funcion itoa ni de la sprintf, y lo resolví de la siguiente manera:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
       int dia;
       int anho;
       char mes[20];
       int i =0;
       char * meses[12] = {"enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"};
    
       puts("Ingrese una fecha escrita en modo usual, por ejemplo 7 noviembre 1991.");
       scanf("%i %s %i",&dia,&mes,&anho);
    
       for (i = 0; i < 12; i++)
       {
          if (strcmp(meses, mes) == 0)
          {
             break;
          }
       }    
       printf("La fecha ingresada es: %d %i %d",dia,i+1,anho);
       return 0;
    }

Evidentemente este es un programa mucho más optimizado que el que hice en un principio. Nuevamente, les doy las gracias a todos!
Saludos :)
« Última modificación: 6 Febrero 2016, 18:18 pm por etcheverrypablol » En línea

fary


Desconectado Desconectado

Mensajes: 1.076



Ver Perfil WWW
Re: cómo comparar una variable string con una cadena en C
« Respuesta #6 en: 6 Febrero 2016, 18:35 pm »

No había caído  :xD pero, claro. Le puedes dar el formato con printf.

Un saludo   :)

pd: es meses
« Última modificación: 6 Febrero 2016, 18:36 pm por fary » En línea

Un byte a la izquierda.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines