Autor
|
Tema: cómo comparar una variable string con una cadena en C (Leído 5,549 veces)
|
etcheverrypablol
Desconectado
Mensajes: 37
¡Hoy mejor que ayer, mañana mejor que hoy!
|
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
Mensajes: 5.968
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
|
|
|
|
etcheverrypablol
Desconectado
Mensajes: 37
¡Hoy mejor que ayer, mañana mejor que hoy!
|
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. #include <stdio.h> #include <string.h> int main(){ int dia; char mes[20]; int anho; char ene[]="enero"; char feb[]="febrero"; char mar[]="marzo"; char abr[]="abril"; char may[]="mayo"; char jun[]="junio"; char jul[]="julio"; char ago[]="agosto"; char sep[]="septiembre"; char oct[]="octubre"; char nov[]="noviembre"; char dic[]="diciembre"; puts("Ingrese una fecha escrita en modo usual, por ejemplo 7 noviembre 1991."); scanf("%i %s %i",&dia ,&mes ,&anho ); printf("La fecha ingresada es: %d %s %d",dia ,mes ,anho ); }
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
|
Pues sería 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 [i ], mes ) == 0) { break; } } printf("La fecha ingresada es: %d %s %d",dia ,mes ,anho ); return 0; }
|
|
|
En línea
|
Un byte a la izquierda.
|
|
|
etcheverrypablol
Desconectado
Mensajes: 37
¡Hoy mejor que ayer, mañana mejor que hoy!
|
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
|
No había caído 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.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema al comparar variable de valor string con letra SOLUCIONADO
Scripting
|
<ИΘZIЭ(ŦB>
|
4
|
7,113
|
23 Agosto 2009, 01:47 am
por leogtz
|
|
|
Ayuda para comparar una cadena con el nombre de una variable int
Programación C/C++
|
dato000
|
6
|
5,738
|
7 Marzo 2011, 11:54 am
por dato000
|
|
|
Pasar cadena String a una variable Char en C++
Programación C/C++
|
RGT
|
3
|
2,729
|
6 Noviembre 2015, 16:19 pm
por class_OpenGL
|
|
|
[Android] Como puedo obtener el item en un string para comparar en el if?
Java
|
@XSStringManolo
|
2
|
3,936
|
9 Noviembre 2019, 17:17 pm
por @XSStringManolo
|
|
|
Comparar datos tabla SQLite con variable tipo String
Java
|
rubia28
|
0
|
3,285
|
28 Noviembre 2021, 21:47 pm
por rubia28
|
|