Matematické Fórum


1. 8. 2026 (L) Fórum bude brzy uzavřeno 😿

Nejste přihlášen(a). Přihlásit

#1 02. 12. 2009 13:49 — Editoval case_fcs (02. 12. 2009 13:53)

case_fcs
Příspěvky: 101
Reputace:   -1 
 

řetězec v C

čau, prosím o nějaké nápady jak v céčku napsat program, který zjistí, zda se text, který zadá uživatel, vyskytuje v souboru

příklad:

v souboru je text: "ahoj jak se máš"

a uživatel zadá třeba slovo: "jak"

a program vypíše, že se tam toto slovo vyskytuje nebo i když uživatel zadá "ja" tak se to tam vyskytuje nebo ikdyž zadá "*ak*" tak se to tam vyskytuje

předem díky za jakékoliv nápady, či rady

Offline

 

#2 02. 12. 2009 15:27 — Editoval septolet (02. 12. 2009 15:28)

septolet
Příspěvky: 334
Reputace:   
 

Re: řetězec v C

Můžeš například využít hlavičkového souboru string.h, konkrétně pak funkce char * strstr(const char *, const char *). Více info třeba zde http://www.cplusplus.com/reference/clib … ng/strstr/

Tz. načítat ze souboru po řádcích do nějakého řetězce a v tomto řetězci pak hledat uživatelem zadaný řetězec pomocí výše uvedené funkce.

Offline

 

#3 05. 12. 2009 18:38

case_fcs
Příspěvky: 101
Reputace:   -1 
 

Re: řetězec v C

tak je to nakonec jinak, náhodně se mi vygeneruje jméno souboru a náhodně se mi vygeneruje maska jména souboru, můžou tam být libovolné ascii znaky a program musí zjistit zda se maska shoduje se jménem, pokud je zadaná *, tak ta může zastupovat libovolný počet znaků (taky jinak žádný znak, jeden nebo více), hvězdička může být jak v masce tak ve jméně, prosím o nějaké algoritmy

↑ septolet: dík za odkaz, ale moc sem ho nepochopila, ale když vlastně hledam jenom název souboru, dá se to taky využít?

Offline

 

#4 05. 12. 2009 20:59

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4247
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: řetězec v C

↑ case_fcs:Měli jste ve škole něco o formálních jazycích/automatech/gramatikách/regulárních výrazech? Pokud jo, tak stačí postavit konečný automat podle masky a tím název souboru prohnat.

Pokud můžete používat externí knihovny, zkus toto: http://www.gnu.org/s/libc/manual/html_n … sions.html


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

#5 06. 12. 2009 18:22 — Editoval case_fcs (06. 12. 2009 18:40)

case_fcs
Příspěvky: 101
Reputace:   -1 
 

Re: řetězec v C

tak to sme bohužel nic takovýho zatim nebrali, přesto ale díky

ještě jenom prosim, když mam nějaký pole znaků, jak se s nim pracuje? když chci třeba písmeno h ze slova "ahoj" tak to neni pole[2] ?

ani nevim jak to moc funguje s charem, když chci přečíst text, co uživatel zadává z klávesnice a uložit si ho do pole tak nemůžu udělat -- scanf("%s", pole); ? tak aby se mi právě každý to písmenko uložilo do jedný pozice viz to s tim h, jak píšu vejš

Offline

 

#6 06. 12. 2009 20:34 — Editoval septolet (06. 12. 2009 20:41)

septolet
Příspěvky: 334
Reputace:   
 

Re: řetězec v C

ještě jenom prosim, když mam nějaký pole znaků, jak se s nim pracuje? když chci třeba písmeno h ze slova "ahoj" tak to neni pole[2] ?

V jazyku C se pole indexují od 0.

ani nevim jak to moc funguje s charem, když chci přečíst text, co uživatel zadává z klávesnice a uložit si ho do pole tak nemůžu udělat -- scanf("%s", pole); ? tak aby se mi právě každý to písmenko uložilo do jedný pozice viz to s tim h, jak píšu vejš

Ano, tohle skutečně jde:

Code:

char pole[20];    
scanf("%19s", pole);

EDIT: Jinak jestli bys se chtěla více ponořit do progarmování v C-čku, tak bych pro začátek doporučil knihy od pana Pavla Herouta, konkrétně díly ze série Učebnice jazyka C. Jsou to dva díly. První se dá koupit třeba zde: http://www.kopp.cz/www/cz/160-vyrobek-ucebnice-jazyka-c a druhý zde: http://www.kopp.cz/www/cz/161-vyrobek-u … ka-c-2-dil

Offline

 

#7 06. 12. 2009 21:24

case_fcs
Příspěvky: 101
Reputace:   -1 
 

Re: řetězec v C

tak díky a ještě jenom, když potřebuju nastavit aby pole bylo o velikosti délky textu jak to udělat?

Offline

 

#8 06. 12. 2009 21:39

septolet
Příspěvky: 334
Reputace:   
 

Re: řetězec v C

Buď si zvol dostatečně velké pole kam se ti ten text vejde nebo použij dynamické pole. Nejlepší by asi bylo zvolit statické pole a ten text načítat po nějakých stejně velkých blocích.

Offline

 

#9 06. 12. 2009 21:50

case_fcs
Příspěvky: 101
Reputace:   -1 
 

Re: řetězec v C

tak já mam jméno souboru v proměnné char * file a používam dynamické pole a napsala sem to teda takhle:

pole = (char *) malloc (* file);

je to možný? akorát já nevytvářim celý program, jen jednu funkci, která porovnává to jméno souboru s maskou, tak nevim jestli to můžu takhle použít, já vlastně takhle vůbec nevim jak je velký file, sem z toho nějak zmatená

Offline

 

#10 06. 12. 2009 22:01 — Editoval septolet (07. 12. 2009 08:36)

septolet
Příspěvky: 334
Reputace:   
 

Re: řetězec v C

Zkus to takhle. Musíš includovat stdlib.h a string.h:

Code:

char *pole;
char *file = "a.txt";
pole = (char *) malloc((strlen(file) + 1) * sizeof(char));

Offline

 

#11 06. 12. 2009 22:52

case_fcs
Příspěvky: 101
Reputace:   -1 
 

Re: řetězec v C

jo dík moc, to mi hodně pomohlo, teď už mi to ten program aspoň přijme, ale asi špatně porovnávam, sem zatim na 20%

když sem si vytvořila to pole, podle toho jak si mi poslal, je potom třeba pole[5] 6. znak v tom textu? funguje to tak?

Offline

 

#12 06. 12. 2009 23:35

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: řetězec v C

↑ case_fcs: ano, cecko indexuje pole od nuly, takze pole[5] odpovida 6. prvku pole

Offline

 

#13 07. 12. 2009 11:10

Pepa143
Zelenáč
Příspěvky: 3
Reputace:   
 

Re: řetězec v C

↑ case_fcs:
Můžeš použít deklaraci statického pole s inicializací:
char a[]={"Ahojky nazdar jaksemas"};
Nemusíš počítat znaky, ty hranaté závorky jsou PRÁZDNÉ a pole bude mít délku početznaků+1 (nezapomeň, že řetězec končí binární nulou a i ta potřebuje v poli svůj bajt.
Jedná se o statické pole. Dynamické viz předchozí příspěvky.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson