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.