Miércoles 6 de Noviembre de 2024, 07:32
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
problema con fechas,consejos por favor
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: problema con fechas,consejos por favor (Leído 2586 veces)
pacorubio77
Miembro MUY activo
Mensajes: 207
problema con fechas,consejos por favor
«
en:
Lunes 20 de Octubre de 2008, 13:49 »
0
Hola,mirar yo quiero que de una fecha asi 1.1.2008 me saque 01/01/2008 pero yo en mi función hago lo siguiente:
FECHA conv1(char yytext[], int yyleng)
{
FECHA f;
int i, resultado=0;
string cadena,dia1,mes1,anyo1;
cadena=yytext;
for (i=0; i< yyleng; ++i){
while(yytext
!='.'){
dia1+=yytext
;
i++;
}
i++;
f.dia=atoi(dia1.c_str());
cout.fill('0');cout.width(2);
//ahora vamos con los meses
while(yytext
!='.'){
mes1+=yytext
;
i++;
}
i++;
f.mes=atoi(mes1.c_str());
cout.fill('0');cout.width(2);
while(i<yyleng){
anyo1+=yytext
;
i++;
}
f.anyo=atoi(anyo1.c_str());
}
return f;
}
yytext,es porque la fecha se la meto como cadena y yyleng es la longitud de la cadena.
el dia si me sale bien,pero el mes no me sale si mete el 4 me sale el 4, y me tiene que salir el 04,me decir otra forma si de esta forma no sale?
Tweet
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: problema con fechas,consejos por favor
«
Respuesta #1 en:
Lunes 20 de Octubre de 2008, 15:27 »
0
Primero comentarte que cometes un error fundamental de metodología y es no modificar la variable del conteo del
for
dentro del
for
. Esto es considerado mala programación. De hecho, ¿para qué necesitas el
for
si realmente los que hacen todo el trabajo son los
while
, ya que el
for
jamás
hará más de un pase? Lo puedes eliminar sin más. Aparte, ¿por qué usas nombres tan poco inteligibles como yytext[] para una fecha e yyleng para su longitud? ¿No es más lógico llamarle fecha[] y long_fecha? Tampoco necesitas el parámetro yyleng porque puedes calcularlo dentro de la función. Intenta que las funciones reciban el mínimo número de parámetros para su funcionamiento correcto.
Aclarado esto, te comento:
Código: C
f.
mes
=
atoi
(
mes1.
c_str
(
)
)
;
if
(
f.
mes
<
10
)
cout
<<
"0"
;
cout
<<
f.
mes
;
Debería darte el resultado que buscas.
Fr33k K0mpu73r
pacorubio77
Miembro MUY activo
Mensajes: 207
Re: problema con fechas,consejos por favor
«
Respuesta #2 en:
Lunes 20 de Octubre de 2008, 15:40 »
0
el motivo de utilizar todas esas funciones,es porque es programaion en lex,pero puse el código ya que las funciones se hacen igual que en C.
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: problema con fechas,consejos por favor
«
Respuesta #3 en:
Lunes 20 de Octubre de 2008, 16:06 »
0
Da igual que sea Lex, es mala programación (en general, no en C en particular, es algo genérico, sin especificar, globalmente, no sé si me explico...) cambiar la variable del FOR dentro del FOR. Y también poner un FOR que no hace nada.
Cita de: "pacorubio77"
el motivo de utilizar todas esas funciones
No sé a qué funciones te refieres...
Fr33k K0mpu73r
pacorubio77
Miembro MUY activo
Mensajes: 207
Re: problema con fechas,consejos por favor
«
Respuesta #4 en:
Lunes 20 de Octubre de 2008, 16:54 »
0
HOla,creo que al decir :
1. f.mes=atoi(mes1.c_str());
2. if (f.mes < 10)
3. cout << "0";
4. cout << f.mes;
te equivocas,porque si ves la funcion devuelve un registro f,que es de tipo FECHA;
y si yo meto 1.4.2008 y quiero que salga 01/04/2008..de su forma saldria 001/4/2008..me entiende?
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: problema con fechas,consejos por favor
«
Respuesta #5 en:
Lunes 20 de Octubre de 2008, 17:23 »
0
Si escribo el "0" inmediatamente antes de sacar por pantalla f.mes, ¿cómo se va a escribir donde el día? ¿seguro que has probado el código?
Y pregunta fundamental: ¿día/mes/año (como todo el mundo) o mes/día/año (como los yankis y los british)?
Fr33k K0mpu73r
pacorubio77
Miembro MUY activo
Mensajes: 207
Re: problema con fechas,consejos por favor
«
Respuesta #6 en:
Lunes 20 de Octubre de 2008, 17:27 »
0
es dia ,mes y año lo que tiene que salir,pero está probado,mira si tu tienes esa funcion:
int main(){
Fecha f2;
f2=conv1(yytext,yyleng);
cout<<f2.dia<<"/"<<f2.mes<<"/"<<f2.anyo
}
si me meto antes en la funcion y pongo lo que usted me dijo,imprime primero eso, y despues los couts de fuera...
lo entendio?
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: problema con fechas,consejos por favor
«
Respuesta #7 en:
Lunes 20 de Octubre de 2008, 17:40 »
0
Aha, vale sí, se me había pasado que es una función que devuelve la fecha. Entonces hay que hacerlo fuera de la función:
Código: C
f2
=
conv1
(
yytext
,
yyleng
)
;
if
(
f2.
dia
<
10
)
cout
<<
"0"
;
cout
<<
f2.
dia
<<
"/"
;
if
f2.
mes
<
10
)
cout
<<
"0"
;
cout
<<
f2.
mes
<<
"/"
<<
f2.
anyo
;
Ten en cuenta que no puedes integrar el 0 a la izquierda en variables numéricas. Sí puedes hacerlo en cadenas de caracteres, así que a lo mejor te conviene que tu función devuelva
char*
y no
FECHA
(o bien que
FECHA
contenga campos
char*
y no
int
).
P.D: Y de todas formas te equivocas, porque sí que escribiría la fecha bien, pero dentro de la función solamente, no fuera (lo que demuestra que
NO
has probado el código).
Fr33k K0mpu73r
pacorubio77
Miembro MUY activo
Mensajes: 207
Re: problema con fechas,consejos por favor
«
Respuesta #8 en:
Lunes 20 de Octubre de 2008, 18:00 »
0
Hola,si probé el codigo pero yo queria mostrar la fecha fuera de la funcion,AHORA SI que sale lo que yo quiero,muchas gracias,de verdad.
Ahora tengo otra duda,si me introducen la siguiente fecha :
23 de septiembre de 2002 (por ejemplo) me tiene que salir 23/09/2008 ,pero la cuestion y no se como identificar el mes con un número, he pensado una cosa, hacer como si fuera un switch,pero en un switch,no le puedo meter cadenas ..verdad?
es decir switch (mes){
case 'enero": f.mes=1;break;
y asi sucesivamente... o si se podria?
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: problema con fechas,consejos por favor
«
Respuesta #9 en:
Lunes 20 de Octubre de 2008, 19:30 »
0
Efectivamente, no puedes hacer un
switch(mes)
siendo
mes
un
char *
, dado que entonces
mes
es un número (la dirección de memoria en que comienza la cadena de caracteres). Lo que sí puedes hacer es usar la clase
string
de C++ (ya que usas
cout
, que es C++).
Código: C
#include <string>
string mes
;
switch
(
mes
)
//etc...
Fr33k K0mpu73r
pacorubio77
Miembro MUY activo
Mensajes: 207
Re: problema con fechas,consejos por favor
«
Respuesta #10 en:
Lunes 20 de Octubre de 2008, 19:43 »
0
pero aunque pongas
#include<string>
si yo hago
string mes;
getline(cin,mes);
switch(mes){
}
aqui me da el mismo error aunque ponga la libreria string
seguro que a usted le va de esta manera?
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: problema con fechas,consejos por favor
«
Respuesta #11 en:
Lunes 20 de Octubre de 2008, 20:42 »
0
No podes usar
switch
asi:
The expression must be of an integral type or of a class type for which there is an unambiguous conversion to integral type. Integral promotion is performed as described in Integral Promotions.
Pasalo a numero primero o hace una clase llamada Mes -constructor recibe cadena y sobrecarga el operador () que hace una conversion a entero -.
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: problema con fechas,consejos por favor
«
Respuesta #12 en:
Lunes 20 de Octubre de 2008, 20:56 »
0
Disculpad, tenéis razón, de esa manera no se puede. En el otro post ya tienes las soluciones. ¡Un saludo!
Fr33k K0mpu73r
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
problema con fechas,consejos por favor