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í
×

dnes 21:33 | Komunita

Na Humble Bundle lze získat počítačovou hru, simulátor hackování, Hacknet (Wikipedie, YouTube) běžící také v Linuxu zdarma. Tentokrát je ke stažení také verze bez DRM a navíc soundtrack. Speciální akce končí v sobotu v 19:00.

Ladislav Hagara | Komentářů: 0
včera 20:11 | Zajímavý software

Alexandre Julliard oznámil jménem vývojového týmu Wine vydání první verze 1.0 knihovny vkd3d určené pro překlad volání Direct3D 12 na Vulkan. Zdrojové kódy vkd3d jsou k dispozici pod licencí LGPLv2.1+.

Ladislav Hagara | Komentářů: 1
včera 19:33 | Komunita

Dnešním dnem lze účet Firefoxu chránit dvoufázovým ověřováním (2FA). Implementován byl standard TOTP (Time-based One-Time Password).

Ladislav Hagara | Komentářů: 0
včera 15:17 | Pozvánky

Od pátku 25. 5. proběhne na Fakultě informačních technologií ČVUT v Praze openSUSE Conference. Můžete se těšit na spoustu zajímavých přednášek, workshopů a také na Release Party nového openSUSE Leap 15.0. Na stejném místě proběhne v sobotu 26. 5. i seminář o bezpečnosti CryptoFest.

Jendа | Komentářů: 0
včera 13:33 | Zajímavý software

Drawpile je svobodný multiplatformní program pro kreslení podporující společné kreslení několika uživatelů. Zdrojové kódy jsou k dispozici na GitHubu pod licencí GPLv3+. Drawpile i Drawpile Server jsou ke stažení také ve formátu AppImage. Stačí tedy nastavit právo na spouštění a spustit.

Ladislav Hagara | Komentářů: 0
včera 09:44 | Zajímavý software

Kalifornskému Muzeu počítačové historie (Computer History Museum) se po pěti letech vyjednávání se společností Qualcomm podařilo získat veškerá práva na poštovního klienta Eudora (Wikipedie), tj. kromě zdrojových kódů muzeum získalo také ochranní známku Eudora nebo domény eudora.com a eudora.org. Po pročištění byly zdrojové kódy Eudory uvolněny pod licencí BSD.

Ladislav Hagara | Komentářů: 5
22.5. 15:00 | Nová verze

Byla vydána nová stabilní verze 5.11 toolkitu Qt. Přehled novinek v příspěvku na blogu a na wiki stránce. Další dnešní příspěvek na blogu Qt je věnován Qt pro WebAssembly umožňujícímu běh Qt aplikací ve webovém prohlížeči. K vyzkoušení jsou příklady.

Ladislav Hagara | Komentářů: 0
22.5. 12:22 | Nová verze

Po 7 měsících vývoje od verze 0.12.0 byla vydána verze 0.13.0 hardwarově nenáročného desktopového prostředí LXQt (Lightweight Qt Desktop Environment, Wikipedie) vzniklého sloučením projektů Razor-qt a LXDE. Přehled novinek v oznámení o vydání a v příspěvku ve fóru.

Ladislav Hagara | Komentářů: 22
22.5. 12:11 | Pozvánky

V úterý 29. května v 18:00 se v Brně koná pátý přednáškový večer o webovém vývoji. Čeká vás povídání o frameworku v Elixiru, vydávání nové kryptoměny přes ICO, component trees v Reactu. Na místě bude lehké občerstvení; vstup zdarma pro registrované. Více informací na Facebooku nebo se rovnou registrujte na Meetup.

dejvik | Komentářů: 0
22.5. 12:00 | Pozvánky

V pátek 25. května 2018 v Praze proběhne společné setkání komunity kolem Drupalu a překladatelů softwaru – tématem bude právě lokalizace svobodného softwaru (nejen Drupalu). Program začíná v 9.30 v budově Českého rozhlasu (Vinohradská 12), ale můžete přijít i později během dne.

Fluttershy, yay! | Komentářů: 0
Používáte pro některé služby inetd?
 (34%)
 (23%)
 (43%)
Celkem 149 hlasů
 Komentářů: 5, poslední 22.5. 16:46
    Rozcestník

    Hledání řetězce v řetězci (C vs. Python)

    13.4.2017 15:53 | Přečteno: 1118× | Ostatní | poslední úprava: 13.4.2017 16:15

    Jestliže chceme zjistit, zda je přítomen určitý řetězec v jiném řetězci, můžeme v jazyce C použít funkci strstr() ze standardní knihovny.
    char *strstr(const char *prohledavany_řetezec, const char *hledany_retezec)
    
    Funkce vrací pointer na první výskyt hledaného řetězce v prohledávaném řetězci, pokud se hledaný řetězec v prohledávaném řetězci nenachází, funkce vrací NULL.

    Tohoto chování můžeme využít a napsat si vlastní funkci nstrstr(), která bude vracet počet výskytů řetězce v řetězci, jak ukazuje následující příklad.
    #include <stdio.h>
    #include <string.h>
    
    int nstrstr(char *s, char *find);
    
    int main()
    {		
    	char str[] = "UBUNTU, KUBUNTU, XUBUNTU A LUBUNTU!";
    	char substr[] = "UBUNTU";	
    	
    	printf("%s je v retezci %dkrat.\n", 
    		substr, nstrstr(str, substr));	
    		
    	return 0;
    }
    
    int nstrstr(char *s, char *find)
    {
    	int n = 0;
    	
    	while ((s = strstr(s, find)) != NULL) {		
    		s++;
    		n++;
    	}
    	
    	return n;
    }
    
    To samé v Pythonu 3. (V Pythonu 2 nebude fungovat kvůli diakritice.)
    str1 = "UBUNTU, KUBUNTU, XUBUNTU A LUBUNTU!"
    strsub = "UBUNTU"
    
    n = str1.count(strsub)
    
    print("{0} je v řetězci {1}krát.".format(strsub, n))
    
    Céčkové funkci strstr() odpovídá v Pythonu metoda find(), která vrací číselnou pozici (index) na první výskyt, anebo -1, pokud není řetězec nalezen. V příkladě s UBUNTU by vrátila nulu.        

    Hodnocení: 43 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    13.4.2017 22:07 Jardík
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    V pythonu 2 je třeba nastavit kódování souboru na utf8, takže diakritikou to nebude.
    kozzi avatar 13.4.2017 22:56 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)

    nejak tam nevidim tu diakritiku

    Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
    14.4.2017 10:41 Jardík
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    V řetězci. Python 2 hlásíval chybu, co si pamatuju, že není specifikované kódování. tady je nějaký PEP, kde je vidět, jak to má vypadat.
    14.4.2017 01:25 unicode
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    Hodně neefektivní kód bych řekl.
    14.4.2017 01:28 unicode
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    Navíc, neměla by ta funkce vracet size_t? Použít int na takovou věc může být celkem nebezpečné...
    14.4.2017 10:38 Jardík
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    To by asi měla. Největší počet může být stejný jako počet znaků, což je stejné, jako maximální velikost objektu (-1 na ukončovací nulu), a k tomu je size_t určený. Já jsem to nějak nezkoumal, jinak bych mu vynadal taky :-)
    14.4.2017 10:38 Jardík
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    Samozřejmě pak musí použít "%zu" ve formátovacím řetězci místo "%d".
    14.4.2017 12:14 sad
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    Tak díky za připomínky. A bylo by korektní použít pro size_t ve formátovacím řetězci "%lu", když bych se chtěl vyhnout C99.
    16.4.2017 21:45 Jardík
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    Bohužel by nebylo. Ve Windows např. sizeof(long) není stejné jako sizeof(size_t) v 64bit verzi. Předpoklady takových věcí jsou naprd. Vyhýbat se C99 nemá smysl. Kdyby se jednalo o C11, tak možná, ale C99 je tu skoro 20 let a většina programů na tvém systému napsaných v C buď C99 používá, nebo má závislost na něčem, co používá C99. Např. gtk/glib se C99 pořád brání (nebo alespoň bráníval), přitom je to kravina a bez C99 gtk nefunguje, protože X11 podporu C99 požaduje.
    Bedňa avatar 15.4.2017 22:50 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    jinak bych mu vynadal taky :-)
    Hneď po prečitani som si hovoril, že tu píšeš pod facke nickom unicode :-)
    KERNEL ULTRAS video channel >>>
    16.4.2017 13:43 Kvakor
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    Hodně neefektivní kód bych řekl.
    No, teoreticky by to mělo smyls, kdyby se počítaly překývající řetězce (typu Hledej "nan" v "banananana" :-) ), ale v praxi by nejspíš bylo něco takového naprosto k ničemu. Přitom by úplně stačilo ze začátku si zjistit délku vyhledávaného řetězce a zapamatovávat si hodnotu vrácenou strstr(), pak by se vyhledávalo ne od s++, ale od <vráceno strstr()>+strlen(<délka vyhledeávaného řetězce>)+1.
    Jendа avatar 16.4.2017 18:18 Jendа | skóre: 74 | blog: Výlevníček | JO70FB
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    IMHO jde o to, že podle implementace strstr buď nepoužívá optimalizovaný vyhledávací automat (KMP, Aho-Corasick…), nebo ho používá, ale při každém zavolání ho musí vytvořit znovu, protože neví, co hledalo a v jakém stavu posledně skončilo.

    Ale to strašně závisí na use-case. Pokud to děláš jednou za půl hodiny na normální řetězec dlouhý 1000 znaků, tak to přece není potřeba řešit. Pokud ti ale celá aplikace začne hnít na porovnávání stringů na vstupu, tak se to asi hodí. V tomto případě jsem poslal patch, který to zrychlil stodesetkrát (!) :-D
    Tohle (mirror) podporujete.
    16.4.2017 11:59 sarimak
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    ad Python: Pritomnost (tedy ne pocet vyskytu nebo index zacatku) substringu lze zjistit jednoduseji - pomoci "substring" in original_string - napr. "kolo" in "okolo" vrati True.
    Bystroushaak avatar 16.4.2017 18:44 Bystroushaak | skóre: 33 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    Nejen jde, ale běžně se to ani nijak jinak nedělá a použití ukázky ke kontrole přítomnosti by bylo považováno za špatné a narazit na ně někde v práci, tak to buď nenechám projít code review, nebo bez milosti zrefactoruju.

    Osobně jsem vůbec nepochopil smysl těhle blogů, kde se probírá něco úplně základního, co je v každém tutoriálu, navíc stylem, který nejen že nic nepřidává, ale často působí zmateným dojmem, asi jako kdyby se to zrovna včera naučil. Třeba tenhle blog:
    Hledání řetězce v řetězci (C vs. Python)
    jestliže chceme zjistit, zda je přítomen určitý řetězec v jiném řetězci
    Což působí dojmem, že chce kontrolovat existenci podřetězce, ale pak přejde na počítání počtu výskytů a chytne se o toho i v pythonní verzi. Pokud bych byl začátečník, měl bych v tom po přečtení blogu tak akorát větší bordel, než jsem měl předtím. Jako nezačátečník musím konstatovat jen že jsem se z toho nic nenaučil, ani nedozvěděl a třeba Jendův příspěvek v diskuzi pro mě byl hodnotnější, než celý blog.

    Autora od psaní nechci odrazovat, ale imho by se měl víc zamyslet a dát to před publikací přečíst někomu jinému, kdo mu k tomu řekne nestranný názor. Taky by si imho měl ujasnit smysl a důvod, proč to publikuje tak jak to publikuje. Je cílem jen vyvolat diskuzi, nebo i někoho něco naučit, nebo jen ukázat, že se něco nového naučil, nebo to tahá náhodně z klobouku?
    16.4.2017 19:05 hypvofxy | skóre: 5 | blog: hypvofxy | Brno
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    +1. Mozna to autor vnima spis jako poradnu, kdy svymi slovy zkusi neco vysvetlit a ceka, az ho ostatni v diskuzi opravi. Na druhou stranu nevim, jak moc je to uzitecne pro kteroukoliv ze zucastnenych stran.

    Osobne nerad radim zacatecnikum, protoze bud jim vedome poskytnu zjednodusenou a neuplnou odpoved, nebo odpoved natolik slozitou, ze ji nedokazou pochopit. Sice se tim mozna neco noveho nauci, ale to uceni je pak nesystematicke.

    Vzdycky rikam, ze prace programatora spociva v neustalem reseni problemu. Naucit se programovat je ten prvni problem. Lidi, co na to maji predpoklady, si tu cestu proste najdou. Pak jsou lidi, co potrebujou vest krucek za kruckem a pokud se jim takove asistence dostane, do nejake miry se to nauci. Otazkou je, jestli je pak vlastne bude bavit to programovani delat, kdyz budou muset hodiny v kuse sedet jen s monitorem a svymi myslenkami.

    Kazdopadne, co se tyka vymeny rad, zkusenosti a inspirace, je vzdycky idealni najit si nekoho, kdo je ve studiu podobne daleko a resit to s nim.
    16.4.2017 20:19 sad
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    Programování v C mě docela baví, tak si občas něco napíši a dám to sem. Programovat zatím moc neumím, tak jsem rád, když mě skuteční programátoři upozorní na chyby a špatné postupy. Samozřejmě bych byl rád kdyby se kvalita mých blogů zvyšovala, a ne naopak.

    Třeba tenhle zápisek zase nebyl tak špatný, ne?
    Funkce strtol a nanosleep (jazyk C)

    Pokud vidíte v publikování těchto blogů vážně problém, tak mohu přestat.
    Bystroushaak avatar 16.4.2017 21:07 Bystroushaak | skóre: 33 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    Pokud vidíte v publikování těchto blogů vážně problém, tak mohu přestat.
    Jak jsem psal, nechci tě odrazovat. Viz ten poslední odstavec. Tu kritiku jsem myslel konstruktivně, ne jako hejt.
    16.4.2017 21:09 hypvofxy | skóre: 5 | blog: hypvofxy | Brno
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    Pokud vidíte v publikování těchto blogů vážně problém, tak mohu přestat.
    Ne. Je to tvuj blog, pis, co uznas za vhodne. My to maximalne nebudeme cist, nebo na to reagovat.
    Bedňa avatar 16.4.2017 21:15 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    Robíš to dobre, občas keď niekto bude potrebovať pomoc, tak si to tu nájde aj s komentármi. Určite neprestávaj.
    KERNEL ULTRAS video channel >>>
    20.4.2017 14:46 pedro
    Rozbalit Rozbalit vše Re: Hledání řetězce v řetězci (C vs. Python)
    Pocet nebo index?

    Založit nové vláknoNahoru

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