Portál AbcLinuxu, 12. května 2024 03:28


Dotaz: Hledání slov v text. souboru

22.1.2014 00:39 Dan
Hledání slov v text. souboru
Přečteno: 228×
Odpovědět | Admin
Zdravím, chtěl bych poprosit o pomoc při vytváření tohoto programu:

Chci udělat program, kde uživatel zadá 4-7 náhodných písmen a program ukáže ty slova ve kterém jsou ta písmena.

Mám k tomu textový soubor, který vypadá nějak takhle (je tam několik tisíc slov): KSF KHG ZTGH LOKIU KJSNVM KSJFNTM MKSJNVI

takže například když zadám písmena KSJV, tak se mi má zobrazit slova KJSNVM a MKSJNVI

Zatím jsem došel tak daleko:

http://pastebin.com/SarQrCrj

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.1.2014 09:46 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Hledání slov v text. souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Panenko skákavá...
for i in $(<text.txt); do echo $i | grep a | grep b | grep c | grep d ; done
To je domácí úkol na ZŠ?
22.1.2014 09:55 potato
Rozbalit Rozbalit vše Re: Hledání slov v text. souboru
Panenko skákavá, zase někdo označuje vlastní odpovědi za řešení, i když vůbec není jasné, zda s řešením jakkoli souvisejí (například to není program v C).
22.1.2014 09:54 potato
Rozbalit Rozbalit vše Re: Hledání slov v text. souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Předpokládám, že to píšeš jako cvičení, takže nebudu popisovat, jak celý program nahradit triviálním skriptem s grepem...

Nepoužívat gets() ani funkce Xscanf() s normálním %s, to je akorát recept na padající program. Namísto toho použít getline(), Xscanf() se zadanou délkou řetezce %.123s nebo ještě lépe automatickou alokací výsledku %ms.

Vnitřní prohledávací cyklus je nějaký podivný a printf() vypisuje kus slova od nalezené posice... Neejednodušší (ne nutně nejefektivnější) postup je projít pro každé slovo zadaná písmena, pro každé otestovat, zda je ve slově přítomno (např. tím strchr()). Když není, tak nastavit nějaký flag a nechat procházení. Pokud projdeš všechna a flag zůstane nenastavený, tak poté to slovo vypsat.
22.1.2014 15:03 MadCatX
Rozbalit Rozbalit vše Re: Hledání slov v text. souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Hodně "manuální" možností je použít fgetc(), znaky ukládat do dynamicky alokovaného řetězce a je-li slovo příliš dlouhé, použít realloc(). Výhodou je, že to půjde zkompilovat a tam, kde "%ms" není dostupné. Písmena k otestování bych uložil do řetězce a postupně volal strchr() nad jednotlivými znaky v něm:
void check_word(const char* word)
{
  size_t idx;
  size_t letters_len = strlen(letters);

  for (idx = 0; idx < letters_len; idx++) {
    if (strchr(word, letters[idx]) == NULL)
      return;
  }

  printf("Word %s contains all letters\n", word);
}

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.