C program, CSAK függvény, kap egy sztringet, amelyben napok és időpontok vannak egy bizonyos formátumban, majd visszaad egy egész értéket. Hogyan programozzam le?
A függvény lényege, hogy megkap egy időpontot (sztringként) egy bizonyos formátumban (pl: H 0.01) majd ki kéne számolni hogy hétfő 0:00-tól mennyi idő telt el percben a következő hétfő előtt (tehát max vasárnap 23:59-ig).
Példa bemenet:
H 0.00
H 0.01
H 23.59
Sze 12.00
V 23.59
Kimenet:
0
1
1439
3600
10079
Az értékek így jönnek ki:
1439-->0*24*60 + 23*60 + 59 //0 nap, 23 óra, 59 perc telt el
3600-->2*24*60 + 12*60 + 0 //2 nap, 12 óra telt el
10079-->6*24*60 + 23*60 + 59 //6 nap, 23 óra, 59 perc telt el
Gondolom, ezt tokenezéssel(strtok) és sztringátalakítással (atoi)- val kéne megoldanom, de nem tudok rájönni pontosan a megoldás menetére.
Ha végigmegyek egyesével a sztringen, az nem jó mert a nap az lehet egy betűs (H,K,P,V) vagy két betűs (Cs) vagy három betűs (Sze, Szo).
Valamint az időpont órája-val is ugyan ez a helyzet.
Ha valaki tudna segíteni, hálás lennék.
Köszönöm előre is a válaszokat.
De jó, ha végigmész egyesével a sztringen, mert szóközig kell menned.
Egy állapotgépet vennék fel a helyedben (enum-ok, aztán switch-case alapján mész tovább).
Először az első betűnél el tudod dönteni, hogy 1 betűs nap-e, ekkor mondjuk egy nap nevű intbe felveszed azt, hogy hétfő után hányadik nap (hétfő=0, kedd=1, péntek=4, vasárnap=6), átmész egy NAP_MEGVAN állapotba. Ekkor átmész a szóközön...
Ha 2 betűs, akkor az lényegében 1 betű (c betű kiadja a napot), csak plusz egy betűnyit haladsz üresjáratban.
3 betűhöz meg felvehetsz 1 állapotot, hogy SZE_VAGY_SZO, és az utolsó betűnél átmész NAP_MEGVAN-ba és számolod a napokat.
Aztán szóközön átugrasz, és onnan már talán boldogulsz :)
Köszönöm a választ, a napok felismerésének, azoknak egy külön érték adása algoritmus még menne, viszont inkább az időpontok vizsgálásával vagyok bajba, szóköz utánni résznél tokenezném, utánna mivel sztring át kell alakítanom egész számmá, majd elmenteném őket külön változóba (ha lehetséges) és úgy megoldani.
Csak ez a baj hogy nem tudom hogy programozzam le :D.
Nagyon hülyén, de megoldottam, case nem akart elfogadni se karaktert,se stringet:
Köszönöm szépen a tippeket.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int minutes( char *adat)
{
int kez,elmultnap,ora=0,perc=0,ossz=0;
char *token=strtok(adat," ");
if(token[0]=='H')
kez=1;
if(token[0]=='K')
kez=2;
if(token[0]=='S' && token[2]=='e')
kez=3;
if(token[0]=='C' && token[1]=='s')
kez=4;
if(token[0]=='P')
kez=5;
if(token[0]=='S' && token[2]=='o')
kez=6;
if(token[0]=='V')
kez=7;
switch(kez)
{
case 1:
elmultnap=0;
ora=atoi(strtok(NULL,"."));
perc=atoi(strtok(NULL," "));
ossz=( (elmultnap*24*60) + (ora*60) + perc);
return ossz;
break;
case 2:
elmultnap=1;
ora=atoi(strtok(NULL,"."));
perc=atoi(strtok(NULL," "));
ossz=( (elmultnap*24*60) + (ora*60) + perc);
return ossz;
break;
case 3:
elmultnap=2;
ora=atoi(strtok(NULL,"."));
perc=atoi(strtok(NULL," "));
ossz=( (elmultnap*24*60) + (ora*60) + perc);
return ossz;
break;
case 4:
elmultnap=3;
ora=atoi(strtok(NULL,"."));
perc=atoi(strtok(NULL," "));
ossz=( (elmultnap*24*60) + (ora*60) + perc);
return ossz;
break;
case 5:
elmultnap=4;
ora=atoi(strtok(NULL,"."));
perc=atoi(strtok(NULL," "));
ossz=( (elmultnap*24*60) + (ora*60) + perc);
return ossz;
break;
case 6:
elmultnap=5;
ora=atoi(strtok(NULL,"."));
perc=atoi(strtok(NULL," "));
ossz=( (elmultnap*24*60) + (ora*60) + perc);
return ossz;
case 7:
elmultnap=6;
ora=atoi(strtok(NULL,"."));
perc=atoi(strtok(NULL," "));
ossz=( (elmultnap*24*60) + (ora*60) + perc);
return ossz;
break;
default:
return 0;
break;
}
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!