Stránka 1 z 1
Externí vyhledávání v c++
Napsal: stř 11. dub 2007, 21:57
od Coburn
Zdarec
Chtěl bych vytvořit prográmek, který by pomocí fstream do sebe natáhl čtyři textové soubory, ve kterých by následně vyhledával slova, které by uživatel napsal. Potřeboval bych jen, aby zjistil, jestli se dané slovo nachází v určitém souboru, nebo ne.
S fstream, porovnávání textu apod. problém nemám. Nevím ale jak udělat vyhledávání. Kdybyste někdo věděl, prosím napište.
Děkuju
Re: Externí vyhledávání v c++
Napsal: čtv 12. dub 2007, 18:17
od €agle
Kdyz
Coburn píše:S fstream, porovnávání textu apod. problém nemám.
tak nejjednoduseji vzdycky nacti radek (nebo rovnou cely soubor) do bufferu a pak if(strstr(Buffer, "Hledany vyraz")) Nalezeno = true;
Napsal: pát 13. dub 2007, 23:52
od Coburn
ano, diky, ale buffer jsem jeste nikdy nepouzival. Jak se to do něj načítá? Ja umim jenom externí soubor načíst, aby vypsal text.
Napsal: sob 14. dub 2007, 12:14
od Coburn
jeste bych se rad jinak zeptal, jestli existuje nejaky prikaz, ktery neporovnava jako !strcmp cely text, ale jenom jeho cast.
napr. kdyz napisu "program", tak aby to naslo take "programy", "programu", "programum"...
Napsal: sob 14. dub 2007, 12:42
od Coburn
A pak jeste jestli byste mi neporadil, proc se mi nechce zkompilovat tohle:
char Text[20];
cin >> Text;
if(!strcmp(Text[1], "0")) {Text[1] = "a";}
Napsal: sob 14. dub 2007, 15:28
od mhl
- před cin ti chyběl prostor jmen, nicnéně v tom problém asi není(pokud používáš direktivu using)
- strcmp očekává první proměnnou typu 'const char *', Text[1] je typu char
- když napíšeš "a" bude to přeloženo jako 'a', '\0' - tj dva znaky ... to do Text[1] samozřejmě uložit nejde
zde je funkční verze...
Kód: Vybrat vše
#include <iostream>
int main()
{
char Text[20];
std::cin >> Text;
if(!strcmp(Text+1, "0"))
{
Text[1] = 'a';
}
}
... nicméně to pořád není ono, když zadáš víc než 19 znaků nastane buffer overflow, chce to více využít předností c++

Napsal: ned 15. dub 2007, 16:41
od Coburn
Diky moc.
c++ forever
Napsal: ned 15. dub 2007, 16:42
od Coburn
Mel bych jeste jednu vec.
Kdyz mam pole Text, ktere porovnavam se zbytkem textu a tim padem vyhledavam a chci, aby se po vyhledani a zapsani do souboru automaticky zmenilo, vzdycky mi to vyhodi chybu. Nemam includovat neco navic?
v nasledujicim kodu je odkaz na funkci fulltext();, ktera je funkcni, v tom problem neni. Nemuzu ji sem dat, je strasne dlouha.
Kód: Vybrat vše
char Text[20];
fulltext();
Text = "obsah1";
fulltext();
Text = "obsah2";
fulltext();
atd atd...
Napsal: ned 15. dub 2007, 19:17
od €agle
Coburn píše:jeste bych se rad jinak zeptal, jestli existuje nejaky prikaz, ktery neporovnava jako !strcmp cely text, ale jenom jeho cast.
napr. kdyz napisu "program", tak aby to naslo take "programy", "programu", "programum"...
Vyse uvedeny strstr hleda prvni vyskyt daneho vyrazu v retezci, takze pokud zadas "abc", je tomu jedno, jestli je retezec "abcd" "abcdef" nebo "abcretezec", proste ti vrati pointer na prvni vyskyt stringu "abc" a je mu jedno, jak pokracuje...
Coburn píše:A pak jeste jestli byste mi neporadil, proc se mi nechce zkompilovat tohle:
char Text[20];
cin >> Text;
if(!strcmp(Text[1], "0")) {Text[1] = "a";}
Uz vysvetloval mhl. Jenom bych dodal, ze pokud chces porovnavat ciste jenom jeden znak, tak je lepsi if(text[1] == '0').
Coburn píše:Kdyz mam pole Text, ktere porovnavam se zbytkem textu a tim padem vyhledavam a chci, aby se po vyhledani a zapsani do souboru automaticky zmenilo, vzdycky mi to vyhodi chybu. Nemam includovat neco navic?
Text = "Obsah" nelze pro nacitani retezcu pouzit, musis pouzit funkci strcpy, v tvem pripade tedy strcpy(Text, "Obsah")
Napsal: ned 15. dub 2007, 19:56
od Brtl!
kdyby si chtel proniknout vice do sveta C++ tak si kup prirucku mas tam vsechno co potrebujes...

Napsal: pon 16. dub 2007, 01:10
od Coburn
Vite o nějaký dobrý? Díky za rady.
Napsal: úte 17. dub 2007, 21:31
od Coburn
Mam problem
ruzne jsem si naklonoval ruzny casti kodu, ze jenom vyslednej textovej soubor měl 80 mb. soubor cpp ma 83MB. Zkousel jsem to zkompilovat, ale dev-c++ mi vyhodi chybu, ze mam malo pameti a visual c++ vyhodi chybu c1010.
dalo to hodně práce, please help
Napsal: stř 18. dub 2007, 23:44
od €agle
83MB zdrojak? To programujes novy windowsy?

Pri tvem klonovani nejspis nekde nastala chyba a zda se, ze jsi asi naklonoval zhoubny nador, protoze 83MB textu je fakt moc...