Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

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