Domanda:
Strutture, c++, inserimento data in un formato specifico?
Sanji /C/AF
2014-01-07 10:26:32 UTC
Sono uno studente al primo anno di ingegneria informatica e fra poco ho il secondo scritto intermedio di informatica appunto.
Guardando un po' i temi d'esame degli scorsi anni ne ho incontrati alcuni in cui viene richiesto di creare una struttura dati per degli abbonamenti comprendente nomi, prezzi etc.
Fra queste varie richieste però spunta sempre un array di 10 caratteri in cui inserire una data, con specificato nella richiesta: "nel formato yyyy-mm-dd".
Quello che voglio chiedere è: è possibile inizializzare l'array all'interno della struttura (magari creando un'altra struttura apposita) in modo che la data debba essere inserita per forza in quella forma? se sì come?
Se non sono stato abbastanza chiaro fatemelo sapere, grazie in anticipo.
Tre risposte:
?
2014-01-07 11:20:37 UTC
Esiste già una struttura contenente la data. Questa è la sintassi:



time_t nomerandom=(time(NULL));

struct tm * now = localtime(&nomerandom);

int giorno, mese, anno;

giorno = now -> tm_mday;

mese = now -> tm_mon+1;

anno = now -> tm_year+1900;



Un altro modo è inserire manualmente la data, che certamente è più scomodo.

C'è un altro modo, se la devi leggere come stringa e non farci operazioni varie, e sarebbe questo:



http://pastebin.com/j6Gxib95



Dagli un'occhiata!

______



Inserire date valide è a cura dell'utilizzatore, d'altronde cosa se ne farebbe di scrivere una data non valida? È come cercare di usare Photoshop per ascoltare la musica!
?
2014-01-08 09:00:43 UTC
Trattandosi di C++ puoi mettere nella struct una funzione per il settaggio di un campo(come se fosse una classe), nel tuo caso potrebbe essere setDate(char* input);

Ti faccio un piccolo esempio di una struttura contenente un char[11] come data che controlla il formato della data in input quando viene settata:



#include



struct myDate

{

private:

char data[11];

bool isNumeric(char* toCheck)

{

for (int i = 0; toCheck[i] != '\0'; i++)

{

if (!isdigit(toCheck[i]))

{

return false;

}

}

return true;

}



bool isDateFormatyyyyMMdd(char date[10])

{

/// Controllo che nelle posizioni 4 e 7 ci sia il carattere separatore '/'

if (date[4] != '/' || date[7] != '/')

return false;



/// Splitto la stringa in 3 parti che corrispondono a yyyy, MM e DD

char anno[5], mese[3], giorno[3];

anno[4] = '\0';

mese[2] = '\0';

giorno[2] = '\0';

memcpy(anno, date, 4);

memcpy(mese, date + 5, 2);

memcpy(giorno, date + 8, 2);

/// Fine Split

/// Controllo che i 3 valori siano numerici

if (isNumeric(anno) && isNumeric(mese) && isNumeric(giorno))

{

return true;

}

return false;

}



public:

bool setDate(char input[10])

{

if (isDateFormatyyyyMMdd(input))

{

memcpy(data, input, 11);

return true;

}

return false;

}

};
?
2014-01-08 08:26:16 UTC
Le date del calendario gregoriano sono sempre state un problema. Se vuoi un controllo stretto non basta il formato ma deve anche essere una data valida. P.es. 2013-12-32 non è valdia. Se poi devi fare calcoli sulle date è un incubo. Io ho scritto una classe per le date del calendario che opera controlli molto stretti siasul formato che sulla validità. E' una classe complessa che non puoi usare in un programmino al volo ma può darti qualche spunto o idea su come organizzarti la struttura:



http://mediwiki.it/extra/guide/cpp/main.php?cap=11



Leggi i capitoli da 4 a 7


Questo contenuto è stato originariamente pubblicato su Y! Answers, un sito di domande e risposte chiuso nel 2021.
Loading...