Portál AbcLinuxu, 10. května 2025 01:34

Dotaz: c++ hledani v textovem souboru

7.11.2013 16:58 marek33
c++ hledani v textovem souboru
Přečteno: 946×
Odpovědět | Admin
jak overit zda je v textovem souboru ulozeno slovo, ktere uzivatel zadal?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.11.2013 17:32 Milan Roubal | skóre: 25
Rozbalit Rozbalit vše Re: c++ hledani v textovem souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
#include <stdlib.h>

int main(void)
{
  system("grep -e slovo soubor.txt");
}
7.11.2013 22:44 bjarne
Rozbalit Rozbalit vše Re: c++ hledani v textovem souboru
To je lajdácké c++, za to zápočet v životě nedostane. Správně tam mělo být include cstdlib, void v závorkách do ++ taky nepatří a ještě by stálo za to vyhodnotit návratovou hodnotu, jestli se to teda našlo či nikoliv. Znovu a lépe!
10.11.2013 20:37 Sten
Rozbalit Rozbalit vše Re: c++ hledani v textovem souboru
A když už se používá cstdlib, tak tam má být std::system ;-)
7.11.2013 17:42 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: c++ hledani v textovem souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejlepší bude otevřít soubor a pak běžným způsobem vyhledávat v textu. Pokud jde o jednoduché slovo a ne o regexp, celý graf se zredukuje na jednu cestu, tj. implementace bude poměrně snadná. Jen pozor na správné nastavení zpětné funkce; ta bude záviset na hledaném slově. Pokud jde o standardní text se slovy oddělenými mezerami, další možnost (snazší, méně efektivní (složitost závisí na délce hledaného slova), tupější, méně zábavná a méně poučná) je číst slovo od slova, ať už tak nebo tak, a porovnávat ho se vstupním slovem (i operátor == bude stačit).
7.11.2013 19:41 potato
Rozbalit Rozbalit vše Re: c++ hledani v textovem souboru
Nastávají teď dlouhé zimní večery, takže implementace Aho–Corasick jistě přijde vhod, ale normálně bych soubor mmap()nul a použil memmem(), pokud se tedy má vyhledávat řetězec. Má-li se vyhledávat slovo v textu (tedy řešit kódování, normalizaci, rozpoznání hranic slov, etc.), tak si to rozhodně nepsat sám, ale použít knihovnu, metody jsou např. i v boostu.
7.11.2013 20:46 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: c++ hledani v textovem souboru

To je všechno pravda, ale měl jsem dojem, že otázka nápadně připomíná nějaký zápočťák. :-)

8.11.2013 09:48 potato
Rozbalit Rozbalit vše Re: c++ hledani v textovem souboru
To je dost možné. Na druhé straně snad funkce standardní knihovny (tedy libc a libstdc++ pro C++) lze při řešení zápočťáků používat. Nebo musí otevírat soubory syscallem a napsat si kolem toho nějakou tu třídu či frameworčík? Možné je vše...
9.11.2013 01:01 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: c++ hledani v textovem souboru

Záleží na konkrétním zadání. Jestliže zadání říká například „implementujte insert a delete ve vyvážených stromech“, použití std::set asi nebude preferovaná metoda vypracování úkolu.

Kromě toho je rozdíl mezi něčím, co je pouze technicky náročné bez jakéhokoliv přínosu pro pochopení algoritmů, a něčím, na čem se člověk učí. Jistě by šlo otevřít soubor klidně bez glibc, tedy nastudovat ABI, připravit data, vyvolat příslušný syscall a tak podobně. Přínos pro algoritmické myšlení tam ovšem nevidím ani v náznaku. Naopak (re)implementace něčeho jako std::set může programátora hodně obohatit. Pro vyhledávání v textu platí totéž.

Jedním z dobrých rozlišovacích znaků mezi bezúčelnou duplikací knihoven a poučnou reimplementací zajímavého algoritmu může být portovatelnost. Otevření souboru nebude portovatelné ani z Linuxu na FreeBSD, zatímco my_great::set poběží všude možně, stejně jako Aho-Corasick.

9.11.2013 10:05 potato
Rozbalit Rozbalit vše Re: c++ hledani v textovem souboru
S tím úplně souhlasím -- až na jednu věc. Viděl jsem dost vystudovaných informatiků ‚řešících‘ nějaký problém neuronovými sítěmi, genetickými algoritmy a pod., přičemž krachovali na neschopnosti otevřít soubor a přečíst z něj pole čísel. Takže ohledně důrazu čistě na techniky a algoritmy jsem trochu skeptický...
9.11.2013 20:45 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: c++ hledani v textovem souboru

Existují například vystudovaní informatici, pro které je dobrá znalost POSIXového API, zkušenost s kernelovým programováním, znalost několika jazyků od C a C++ přes Javu až po Python a pár běžných vývojových nástrojů (gcc/clang, gdb, valgrind, KDevelop, JDK, Eclipse/IntelliJ, Git, SVN, ...) samozřejmostí, bez které si neumějí informatiku představit.

Existují ovšem také „ti druzí informatici“, kteří nejsou o nic horší nebo lepší, o nic hloupější či chytřejší, ale podle mého názoru by si měli říkat spíš „matematici“. Zabývají se pouze teoretickými záležitostmi, získat jednoduchý projekt z repository je pro ně nepřekonatelný problém, desktopy jim musí instalovat správce sítě a v mém oblíbeném testu (napsat, přeložit a spustit Hello World v libovolném kompilovaném jazyce) by někteří neuspěli.

Vědecký přínos takových teoretických informatiků může být v konečném součtu větší než v případě těch praktických. Problém ovšem může nastat, když se teoretici rozhodnou pracovat v industry, protože z hlediska praktických dovedností dělají někteří z nich „vystudovaným informatikům“ ostudu. :-)

Tvorba efektivního a udržovatelného software vyžaduje z každé oblasti něco. Znalost algoritmů a jejich vlastností je nutné skloubit s technickými dovednostmi a se schopností srozumitelně formulovat problém. V tom je věda, řemeslo i umění zároveň.

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.