Kezdőoldal » Számítástechnika » Programozás » C program, CSAK függvény, kap...

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?

Figyelt kérdés

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.



2021. máj. 28. 19:35
 1/5 anonim ***** válasza:
100%

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 :)

2021. máj. 28. 19:53
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
Egy switch-csel megnézed az első karaktert (ha ez S, akkor a harmadikat is), és már tudod, hány napnyi percről indul az érték. Működni fog tokenezéssel, ami szóköznél és pontnál vág. De a nap megállapítása után már tudod is, hogy hol lesz az első számjegy, akár végig is lépkedhetsz egyesével a számjegyeken.
2021. máj. 28. 20:00
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:

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.

2021. máj. 28. 20:22
 4/5 anonim ***** válasza:

Valahogy így:

int ora = atoi(token);

token = strtok(NULL, szoveg);

int perc = atoi(token);


[link]

2021. máj. 28. 21:48
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:

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;



}



}

2021. máj. 29. 00:08

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!