Portál AbcLinuxu, 9. května 2024 06:26


Dotaz: Parametr C++

4.12.2012 10:49 Tom
Parametr C++
Přečteno: 371×
Odpovědět | Admin
Ahoj, mohu Vas poprosit o radu. Mejme funkci
int vypis( const char * roky)
a parametr muze obsahovat
2012
2012 - 2014 // interval, tj 2012,2013,2014
"2012, 2014, 2016"
jak prosim tyto parametry dostanu do promenne nebo spis do pole? Nebo jak to lze resit? Bile znaky vynechat. Dekuji
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

4.12.2012 11:03 Tom
Rozbalit Rozbalit vše Re: Parametr C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
char hotovo[1000];
for (unsigned int i=0; i< strlen (roky); i++) {
    if(roky[i] == ' ') 
        mezera++;
    else 
        hotovo[i-mezera] = roky[i];
}
4.12.2012 13:03 Ivan
Rozbalit Rozbalit vše Re: Parametr C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
To vypada spis jako Ccko. v C++ by to spis melo byt:

"int vypis( const std::string &roky)"

A z toho samozrejme vyplyne, jestli na "parsovani" pouzites postupy z Ccka anebo C++.
4.12.2012 14:20 michi
Rozbalit Rozbalit vše Re: Parametr C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
No...co mě napadá nejjednodušší, dostat to do funkce jako řetězec a ten potom univerzálně rozdělit do částí podle čárek, čímž získáš pole, a z toho pole potom každou položku zkoumat na rozsah, ze kterýho zjistíš začátek a konec a do konečnýho pole doplníš buď začátek, konec a prvky mezi tím, nebo čistej jeden rok. Vyloučení duplicit bych dělal třeba namapováním do mapy... Ale to je jen taková rychlá úvaha :-)
4.12.2012 14:35 michi
Rozbalit Rozbalit vše Re: Parametr C++
A narychlo jsem to upekl v Ruby, kvůli tomu principu :-)
#!/usr/bin/env ruby

vstupy = [ "2012", "2012 - 2014", "2012, 2014-2016, 2018" ]

def vypis(vstup)
        vystup = [ ]
        prvky = vstup.split(',')
        prvky.each {|p|
                p = p.split('-')
                if p.length == 1 then
                        vystup << p[0].to_i
                        next
                elsif p.length == 2 then
                        zacatek = p[0].to_i
                        konec = p[1].to_i
                        zacatek.upto(konec) {|y| vystup << y }
                else
                        throw :parseError
                        exit
                end
        }

        puts "Vstup #{vstup}:"
        vystup.each {|v| puts v }
        puts
end

vstupy.each {|i| vypis(i) }

===========

Vstup 2012:
2012

Vstup 2012 - 2014:
2012
2013
2014

Vstup 2012, 2014-2016, 2018:
2012
2014
2015
2016
2018

4.12.2012 16:29 mch
Rozbalit Rozbalit vše Re: Parametr C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ja bych zkusil neco jako:

istringstream ss;

ss.str(roky);

vector <unsigned int> roky_pole;

// nacitej jak z std::cin

// ss >> ... rovnou do pole nebo do pomocne promene a pak roky_pole.push_back()

+ samozrejme rozlisit ty ruzne vstupy, pomuzou treba metody peek(), std::skipws, testovani proudu (good(), eof(), ...) a podobne vecicky

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.