Tässä tällainen aloittelijaystävällinen koodivinkki luultavasti riittävän hyvin kommentoituna ja muutenkin selvänä.
Funktion tarkoituksenahan on siis muuttaa sekunnit muotoon: viikot vuorokaudet tunnit minuutit sekunnit (w d h min s) string-merkkijonoksi. Nimi tälle funktiolle tulee siitä, että mIRC scriptissä on juuri samanlainen $duration(), niin päätinpä kääntää sen C++:lle.
PS. Tämä on ensimmäinen koodivinkkini. :-)
duration.h
std::string duration(const int sekunnit)
{
std::string palaute; // funktion palautettava arvo
char temp[100] = { 0 }; // sprintf tarvitsee char-taulukon parametrikseen
int w = 0, // viikot
d = 0, // vuorokaudet
h = 0, // tunnit
min = 0, // minuutit
s = sekunnit; // sekunnit
if (sekunnit < 0) s *= -1; // jos parametrina on annettu negatiivinen luku, käännetään se positiiviseksi
while (s >= 60*60*24*7) // 60 sekuntia * 60 (minuutit) * 24 (tunnit) * 7 (vuorokaudet) = viiko
{
w++; // lisätään viikkoja ja
s -= 60*60*24*7; // vähennetään sekunteja yhden viikon verran
} // kunnes on siirryttävä vuorokausiin, jolloin sekunteja
// ei voida enää kokonaisina viikkoina ilmoittaa
while (s >= 60*60*24) // 60 sekuntia * 60 (minuutit) * 24 (tunnit) = vuorokausi
{
d++; // lisätään vuorokausia ja
s -= 60*60*24; // vähennetään sekunteja yhden vuorokauden verran
} // kunnes on siirryttävä tunteihin, jolloin sekunteja
// ei voida enää kokonaisina vuorokausina ilmoittaa
while (s >= 60*60) // 60 sekuntia * 60 (minuutit) = tunti
{
h++; // lisätään tunteja ja
s -= 60*60; // vähennetään sekunteja yhden tunnin verran
} // kunnes on siirryttävä minuutteihin, jolloin sekunteja
// ei voida enää kokonaisina tunteina ilmoittaa
while (s >= 60) // 60 sekuntia = minuutti
{
min++; // lisätään minuutteja ja
s -= 60; // vähennetään sekunteja yhden minuutin verran
} // kunnes on enää alle 60 sekuntia jäljellä, jolloin sekunteja
// ei voida enää kokonaisina minuutteina ilmoittaa
if (w) // jos parametrina annettu aika on yksi viikko tai enemmän,
{ // lisätään viikot funktion arvoon
sprintf(temp, "%iw ", w);
palaute += temp;
}
if (d) // jos parametrina annettu aika on yksi vuorokausi tai enemmän,
{ // lisätään vuorokaudet funktion arvoon
sprintf(temp, "%id ", d);
palaute += temp;
}
if (h) // jos parametrina annettu aika on yksi tunti tai enemmän,
{ // lisätään tunnit funktion arvoon
sprintf(temp, "%ih ", h);
palaute += temp;
}
if (min) // jos parametrina annettu aika on yksi minuutti tai enemmän,
{ // lisätään minuutit funktion arvoon
sprintf(temp, "%imin ", min);
palaute += temp;
}
sprintf(temp, "%is", s); // sekunnit lisätään aina funktion arvoon
palaute += temp;
if (sekunnit < 0) // jos parametrina annettu aika on negatiivinen,
palaute = "-" + palaute;// lisätään miinusmerkki ennen lukua
return palaute; // palautetaan sekunnit muodossa w d h min s
}funktion käyttö
#include <iostream>
#include "duration.h"
using namespace std;
int main()
{
cout<<duration(2231234); // tulostaa 3w 4d 19h 47min 14s
return 0;
}Aihe on jo aika vanha, joten et voi enää vastata siihen.