abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 11:55 | Komunita

Vývojový tým OpenSSL ve spolupráci s iniciativou Core Infrastructure konsorcia Linux Foundation spustil proces přelicencování této kryptografické knihovny ze současné licence na licenci Apache Licence v 2.0 (ASLv2). Nová licence usnadní začleňování OpenSSL do dalších svobodných a open source projektů. Všichni dosavadní vývojáři OpenSSL (Authors) obdrží v následujících dnech email s prosbou o souhlas se změnou licence.

Ladislav Hagara | Komentářů: 7
včera 01:11 | Komunita

Před třemi týdny Mozilla.cz představila projekt Photon, jehož cílem je návrh a implementace nového vzhledu Firefoxu. Včera zveřejnila první náhled vzhledu Photon. Práce na projektu Photon jsou rozděleny do pěti týmů, které celkem čítají 19 lidí. Zaměřují se na zlepšení prvního spuštění Firefoxu a zaujetí nových uživatelů, celkovou úpravu vzhledu, zlepšení animací, zrychlení odezvy uživatelského rozhraní a také upravení nabídek. Vývoj lze sledovat v Bugzille.

Ladislav Hagara | Komentářů: 28
23.3. 20:00 | Komunita

OneDrive pro firmy je již ve webových prohlížečích na Linuxu stejně rychlý jako na Windows. Microsoft opravil chybu z listopadu loňského roku. OneDrive pro firmy běžel na Linuxu mnohem pomaleji než na Windows. V popisu chyby bylo uvedeno, že stačilo v prohlížeči na Linuxu nastavit v user-agentu Windows a vše se zrychlilo. Odpovědí Microsoftu bylo (Internet Archive: Wayback Machine), že Linux není podporován. Po bouřlivých diskusích na redditu i Hacker News byla chyba nalezena a opravena.

Ladislav Hagara | Komentářů: 6
23.3. 19:00 | Zajímavý projekt

Byla vyhlášena soutěž Hackaday Prize 2017. Soutěž je určena vývojářům open source hardwaru. Pro výherce je připraveno celkově 250 tisíc dolarů. Každý ze 120 finalistů získá tisíc dolarů. Nejlepší pak navíc 50, 30, 20, 15, 10 a 5 tisíc dolarů. Jedná se již o čtvrtý ročník soutěže. V roce 2014 zvítězil projekt globální sítě open source pozemních satelitních stanic SatNOGS. V roce 2015 zvítězil open source systém pro řízení elektrických invalidních vozíků pohybem očí Eyedriveomatic. V roce 2016 zvítězil modulární robot Dtto.

Ladislav Hagara | Komentářů: 0
23.3. 15:00 | Bezpečnostní upozornění

Byla vydána Samba ve verzích 4.6.1, 4.5.7 a 4.4.12. Řešen je bezpečnostní problém CVE-2017-2619. Pomocí symbolických odkazů a souběhu (symlink race) lze "teoreticky" získat přístup k souborům, které nejsou sdíleny. Linuxové distribuce jsou postupně aktualizovány (Debian).

Ladislav Hagara | Komentářů: 0
23.3. 07:43 | Nová verze

Na Steamu se objevil port hry Arma: Cold War Assault (Operation Flashpoint) pro Mac a Linux. … více »

creon | Komentářů: 30
23.3. 05:55 | Nová verze

Po 18 měsících od vydání verze 8.0 byla vydána verze 9.0 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab. Představení nových vlastností v příspěvku na blogu a na YouTube.

Ladislav Hagara | Komentářů: 0
23.3. 03:33 | Komunita

Platnost posledního patentu souvisejícího s Dolby Digital (AC-3) vypršela. Po MP3 se tak do Fedory oficiálně dostane také kodek AC-3.

Ladislav Hagara | Komentářů: 5
23.3. 00:44 | Komunita

Feral Interactive, společnost zabývající se vydáváním počítačových her pro operační systémy macOS a Linux, nabízí své hry na Steamu vývojářům open source 3D grafické knihovny Mesa zdarma. Podmínkou je minimálně 25 commitů za posledních 5 let. Stejnou nabídku dostali vývojáři knihovny Mesa v roce 2015 od Valve. O rok dříve dostali od Valve tuto nabídku vývojáři Debianu a Ubuntu.

Ladislav Hagara | Komentářů: 0
22.3. 23:55 | Nová verze

Opera 44, verze 44.0.2510.857, byla prohlášena za stabilní. Nejnovější verze tohoto webového prohlížeče je postavena na Chromiu 57. Z novinek vývojáři Opery zdůrazňují podporou Touch Baru na nejnovějších MacBoocích Pro (gif). Přehled novinek pro vývojáře na blogu Dev.Opera.

Ladislav Hagara | Komentářů: 1
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (14%)
 (2%)
 (72%)
 (3%)
 (10%)
Celkem 930 hlasů
 Komentářů: 72, poslední 1.3. 11:16
    Rozcestník

    Dotaz: c++ převod string na int

    18.7.2005 13:26 tuzka
    c++ převod string na int
    Přečteno: 22324×

    když mám v objektu string uložen řtězec např. "4587" jak ho mám převést na číslo int

    myslím tim nějakou metodou třídy string ( i = retezec.prevednacislo();

    Odpovědi

    18.7.2005 13:51 podlesh | skóre: 38 | Praha
    Rozbalit Rozbalit vše Re: c++ převod string na int
    Asi špadná odpověď, osobně preferuji plain C :-)
    i = atoi(retezec.c_str());
    18.7.2005 13:55 podlesh | skóre: 38 | Praha
    Rozbalit Rozbalit vše Re: c++ převod string na int
    Tedy ani ne tak špatná, jako "nekorektní".

    Pro robustnější parsování (rozpoznání, zda řetězec je vůbec číslo, nebo kde číslo končí) slouží funkce strtol .
    18.7.2005 14:01 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: c++ převod string na int
    Zaleží na tom, co se má stát, když řetězec nerepresentuje číslo v desítkové soustavě. Pokud ti vyhovuje ,věci, které začínají jako číslo, jsou toto číslo, a věci, který vůbec jako číslo nevypadají, jsou nuly`, tak je atoi() v pohodě.
    18.7.2005 13:58 #Tom
    Rozbalit Rozbalit vše Re: c++ převod string na int
    Někteří lidi C++ nesnáší kvůli věcem, jako je tato:
    #include <sstream>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main() {
      string s = "1234";
      istringstream is(s);
      int num;
      is >> num;
      cout << "Číslo je " << num << endl;
      return 0;
    }
    
    18.7.2005 14:29 tuzka
    Rozbalit Rozbalit vše Re: c++ převod string na int
    díky, přesně to sem hledal
    elviin avatar 18.7.2005 17:34 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: c++ převod string na int
    Právě modularita, na které je vaše řešení založené je na tom to pěkný. Problém není to, jak to lze vyřešit, problém c++ je ten, že neexistuje specializovaná metoda, která převádí řetězce na čísla, přesto že to je jeden z nejčastějších převodů reprezentace informace. Obecně mohu pracovat s informací, jak je libo, můžu napsat metody na převod čehokoliv na cokoliv, pokud to má význam a nějak mě to nesvazuje. To umožňuje přetížení operátoru <<,>> pro různé typy. Navíc díky přetížení můžu vytisknout informaci kamkoliv.
    18.7.2005 17:42 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: c++ převod string na int
    No, nevím. Proč vytvářet nějaký stream namísto obyčejného konstruktoru integeru z řetězce?
    18.7.2005 18:39 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: c++ převod string na int
    Výhodou je fakt, že stejný postup mohu použít pro jakýkoli typ, pro který je definován operátor >>. Takže kdykoli si zavedu novou třídu X, ať už je to komplexní číslo, matice nebo cokoli jiného, stačí zadefinovat std::istream& operator >>(std::istream&, X&) a nemusím extra definovat funkci pro konverzi ze stringu. No a kdo chce funkci, může si zadefinovat template void string_to_anything<class X>(const std::string&, X&) nebo X* anything_from_string<class X>(const std::string&).
    18.7.2005 18:55 #Tom
    Rozbalit Rozbalit vše Re: c++ převod string na int
    Sice se mi nechtělo číst zdrojáky třídy istringstream, ale řekl bych, že tyhle vlastnosti by se daly zahrnout klidně do třídy string, vypadalo by to líp. A nebyl by potřeba konstruktor navíc.
    18.7.2005 19:14 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: c++ převod string na int
    Nerozumím. Výkonnou část konverze napsat musíš. A normálně, když chci z nějakého typu jný, tak to udělám:
    i = int("1234")
    nebo spíš
    int i("1234");
    abyste to měli se syntaxí C++, kde to ale takhle nejde. A celá ta konstrukce se streamy je jen složitý workaround.
    BWPOW avatar 19.7.2005 07:53 BWPOW | skóre: 21 | Kosice
    Rozbalit Rozbalit vše Re: c++ převod string na int

    Ja som asi strasny barbar, ked pouzivam:

    if(sscanf(a.c_str(),"%d",&x)!=1) printf("neda sa\n");

    Stary C-ckar sa vo mne nezaprie :)

    Prisiel som, videl som, hmm ... bwpow.eu
    19.7.2005 09:49 #Tom
    Rozbalit Rozbalit vše Re: c++ převod string na int
    To je dobré. ;-) Já mám zase rád toto:
    char line[256];
    while (cin.getline(line, sizeof(line))) { ... }
    
    elviin avatar 19.7.2005 11:14 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: c++ převod string na int

    Už jsem to napsal dříve/výše. V C++ metoda pro konverzi ze stringu na typ int ve třídě std::string nebo konstruktor pro int(basic_string<char>) neexistují:

    int mujInt = mujString.prevedNaInt(); //nenajdem
    i int("1234"); //taky ne
    

    Proc neexistuje? Vzdyt je to častý způsob konverze! Pokud se na to podíváme z pohledu návrhu, tak IMHO myslim, ze to je velmi konzistetní a obecné řešení - nevkládat konverzní metody. S takovým přístupem bychom mohli rovnou zaimplemetovat např. do std::string i metody pro např. formátování. A to se mi na C++ libí, oddělení odlišných úloh tak, abych mohl v budoucnu použít opravdu jen to, co chci, nechci stavět na něčem, co nepotřebuji. Nepotřebuji konverzní funkce jako

    TypRimskaCisla mojeRimskeCislo = 
      mujString.prevedNaRimskeCislo();
    

    a nezastavíme se mohli bychom generovat další konverze. Když budu mít následující problém
    TypVelkaBrambora mojeVelkaBrambora = 
      mojeBrambora.prevedNaVelkouBramboru();
    

    To jak interpretuju velikost brambory přeci nezáleží na bramboře, ale na mě, to jak interpetuju cigarety, jestli jsou proclené nebo ne, nezáleží na cigaretách, ale na celníkovi nebo na mě, to jak interpretuju pasažera v tramvaji, jestli jede načerno nebo ne, nezáleží na něm, ale na tom, jestli se za přepravu zrovna platí, to jak interpretuju čísla, nezáleží na typu std::string nebo typu int, ale na tom, jak je interpretuje istringstream, a právě istringstream definuje formátování, interpretuje informaci např. jako int pro třídu std::string. Istringstream jen čte řetězce a interpretuje je s použitím formátovacích flagů, manipulátorů, nic víc po ní nechci.

    Naopak funkcemi z istringstream bych nechtěl zanášet std::string nebo int.

    Co chybí v <sstream> je obecná konverzní funkce, něco jako:

        template<typename T>
        inline T prevedDo(const string& st) {
            T t;
            istringstream(st)>>t;
            return t;
        } 
    
    Pro typy, pro které jsou přetížené operátory << a >> ve třídě istringstream pak můžu napsat:
    int myInt = prevedDo<int>("12345");
    double myDouble = prevedDo<double>("13245");
    float myFloat = prevedDo<float>("13245");
    

    Jedna z dobrých vlastností v C++ je modularita (tím nějak nechci komentovat jiné jazyky), která se bude ješte prohlubovat. Bohužel díky pozdnímu standardu existuje dosud mnoho FUDu.

    19.7.2005 12:30 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: c++ převod string na int
    Houby. Zapomeň na streamy, stringy a čísla.

    Máme třídu A a třídu B. Jak má vypadat a kdo má definovat metodu, která vytváří z typu A typ B?

    Zkus si dosadit:

    - za A string, za B istream

    - za A int, za B double

    - za A datum, za B datum+čas (nějaké typy, které je representují)

    - a konečně za A string, za B integer
    elviin avatar 19.7.2005 12:48 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: c++ převod string na int
    ... s octem;)

    Máme třídu A a třídy B, C, D, E .... mám pokračovat? Kolik konverzí se musí definovat?

    Datum je prostě jen jeden. To jak bude vypadat není jeho věc. To je věc třídy XY, která od něj dědí a interpretuje ho. Přesně tak např. ostringstream, istringstream nebo stringstream interpretují std::string. Mně se takovej přístup líbí. Ale určitě by se mi líbilo i něco lepšího, proč ne.
    19.7.2005 13:11 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: c++ převod string na int
    Konverzí se musí definovat tolik, kolik je jich zapotřebí. Nechceš mi snad tvrdit, že při postupu se streamem žádná konverze není zapotřebí a integery v stringstreamu nějak samy magicky vznikají?

    Ve skutečnosti máš konverze dvě:

    1. Interpretace stringu jako stream.

    2. Převod stringu na int -- ta se děje uvnitř >>, ale definovat ji nekdo musí.

    Tu první děláš zbytečně.
    19.7.2005 13:18 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: c++ převod string na int
    Ještě jinak. Když nebudu mít to číslo jako string (tedy sekvenci znaků, což je věc, kterou přirozeně lze interpretovat jako stream), ale v nějakém obskurním typu MyType, jak ho převedu na int? Budu se pokoušet definovat mytypestream -- což je věc, která nedává smysl, protože MyType sekvence znaků vůbec nepřipomíná, takže ho na ten interface nenacpu -- abych mohl použít ke konverzi streamy?
    19.7.2005 17:14 podlesh | skóre: 38 | Praha
    Rozbalit Rozbalit vše Re: c++ převod string na int
    Už jsem to napsal dříve/výše. V C++ metoda pro konverzi ze stringu na typ int ve třídě std::string nebo konstruktor pro int(basic_string<char>) neexistují:
    Samozřejmě, pokud to vezmeme obecně: tyto metody nepatří do třídy string (tedy zdroje, nositele dat bez informace o struktuře), ale do třídy cílové, která umí data zakódovat (a nejen do řetězce). Tedy do třídy int ...
    Jedna z dobrých vlastností v C++ je modularita (tím nějak nechci komentovat jiné jazyky), která se bude ješte prohlubovat. Bohužel díky pozdnímu standardu existuje dosud mnoho FUDu.
    Tento trik s isstringstream je prostě hack. To samozřejmě mnoho lidí obdivuje, některé jazyky na tom stojí. Ale mnoho lidí zase stojí v úžasu nad takovým overheadem u jedné z nejběžnějších operací vůbec.

    Navíc, i jako obecný princip to není moc užitečné. Protože to předpokládá, že nějaké obecné objekty budou mít jednoznačnou znakovou reprezentaci - a to mít nebudou. Ani u těch čísel to není zcela jednoznačné, můžu chtít ta čísla hexadecimálně, nebo v různé soustavě podle C notace...
    19.7.2005 17:20 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: c++ převod string na int
    Ale mnoho lidí zase stojí v úžasu nad takovým overheadem u jedné z nejběžnějších operací vůbec.

    Ten overhead ve skutečnosti není zdaleka tak velký, jak to opticky vypadá.

    Navíc, i jako obecný princip to není moc užitečné. Protože to předpokládá, že nějaké obecné objekty budou mít jednoznačnou znakovou reprezentaci

    On to také obecný princip není. Jde jen o to, že má-li objekt svou textovou reprezentaci (jako třeba int), je obvykle operace jeho přečtení ze stringu přesně totéž jako jeho přečtení z jiného streamu (soubor, socket, …). A byl by tedy nesmysl implementovat ji dvakrát.

    19.7.2005 17:36 podlesh | skóre: 38 | Praha
    Rozbalit Rozbalit vše Re: c++ převod string na int
    Nemusí se implementovat dvakrát; stačí ji mít přístupnou přes dvě rozhraní, která se liší použitím i smyslem. Nehledě k tomu, že "obykle" nemusí znamenat vždy a reprezentace ve stringu a v obecném streamu se může lišit (do souboru se například bude ukládat binárně).

    Ano, chápu že zobecnění a modularita je pěkná věc, ale tento konkrétní případ mi přijde dotažené doslova "ad absurdum" . Nebo možná spíše "znouzecnost" :-)
    19.7.2005 17:50 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: c++ převod string na int
    stačí ji mít přístupnou přes dvě rozhraní

    A to je přesně to, co vyřešíte jedním jednoduchým templatem. Pouze se (v rozporu s tradicí) za primární interface považuje ten streamový, protože je obecnější.

    do souboru se například bude ukládat binárně

    Což je přesně to, co se v dokumentaci k libstdc++ velmi důrazně nedoporučuje, protože to téměř garantuje nepřenositelnost toho datového formátu. Ne že by to nešlo udělat i přenositelně, ale dalo by to podstatně víc práce.

    19.7.2005 18:07 podlesh | skóre: 38 | Praha
    Rozbalit Rozbalit vše Re: c++ převod string na int
    stačí ji mít přístupnou přes dvě rozhraní

    A to je přesně to, co vyřešíte jedním jednoduchým templatem. Pouze se (v rozporu s tradicí) za primární interface považuje ten streamový, protože je obecnější.

    Nevyřeším. Ta šablona totiž obsahuje i implementaci, která nebude optimální. A tím nemyslím jenom to, že se vyrábí wrapper stream. U složitějšího parsování je i rozdíl ve zpracování a rozhodně nebude výjimkou, že se data z toho streamu načtou do řetězce a pak se parsují. Ony ty tradice nemusí být nemysly :-)

    No, už se trochu dostáváme mimo.

    Celá tato diskuse pro mě velmi překvapivá. Jsem ze strany zastánců C++ zvyklý na argumenty vyzdvihující efektivitu výsledného kódu a šetření cyklů procesoru. Že to někdo bere zcela naopak a pojímá C++ spíše jako typovaný LISP, to bych ani ve snu nečekal. Holt - pokrok :-)

    Založit nové vláknoNahoru

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

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.