

Pomoc s programem v C
Ahoj,
potreboval bych poradit s jednim programem v C (všepřes komand lajnu).
1/Zadam nejaky text a ENTER
2/Program se zeptá na cele čislo od 1 do 9
3/Program najde shodne znaky nebo skupiny znaku, ktere se opakuji a nahradi je jednim a před ten znak vloží číslo,kolikrat jich nahradil
4/Vytiskne na obrazovku vysledek
Př.
Vstup: blblbl blabla pro hodnotu 2
Výstup: 2bl blabla
Vstup: blblbl blabla pro hodnotu 3
Výstup: blblbl 1bla
atd...
Vstup: blblbl blabla pro hodnotu 2
Výstup: 2bl blabla
POPŘ.
Vynechat Bod 2 a konttrolovalo by mi to bloky třeba do po sobe 9 jdoucich znacich
Vstup: blblbl blabla pro hodnotu 2
Výstup: 2bl 1bla
atd...
Moje řešení bohužel moc nefunguje, snažil jsem se na něco přijit zknihy Programovací jazyk C, ale nahrazuje mito jen stejne sznakyposobe jednim např(vstup aaa vystup a)
Mnohokrát děkuji
A kde máš svůj kód?
Tohle jse stvořil s pomoci knihy a internetu
Výstup mi vyjde: Vstupni text
Stačilo b, kdyby mi někdo pomohl udělat následující:
Text by se zadával přimo z příkazové řádky
a program by ještě před nahrazené znaky dal číslo, kolik jich nahradil...
Aby byl výstup: Vstupn1i t2ext
Pozor, keby si mal v premennej buf reťazec obsahujúci znak '%', tak to nedopadne dobre. Ak chceš vypisovať hocičo pomocou printf, tak formátovací reťazec by prakticky nikdy nemal byť vstupom od používateľa. Čiže by to malo vyzerať takto:
V tvojom prípade by bola vhodnejšia funkcia puts, ktorá na koniec vypisovaného reťazca pridá aj znak pre nový riadok.
Budeš mať 2 smerníky - jeden do vstupného reťazca a druhý do výstupného reťazca. Najprv skontroluješ, či sú na vstupe opakujúce sa skupiny znakov. Ak áno, tak si zvýšiš interné počítadlo a posunieš sa na vstupe o tú skupinu znakov ďalej. Ak nie, tak prekopíruješ znak zo vstupu na výstup a posunieš oba smerníky o jeden znak ďalej. Predtým ale nezabudneš vypísať počet v internom počítadle (a vynulovať ho), ak je nenulové.
Mockrát díky
, ještě si to předělám, abychto mohl spouštět pomocíparametrů přes command lajnu.
Mohl bysmiještě poradit nebo aspoň naznačit, jak udělat reverzní program, po zadání té délky skupiny znaků např. "2", aby to zase z textu např "4au" udělalo zpět "auauauauau" ? Díky moc
Nie je ošetrené pretečenie pri zapisovaní do výstupného reťazca:
Díky, mohl by jsi mi ještě pomoci, s těmi parametry... ted s tim zapasim....
Takhle byto vypadalo
program.exe 1 bbbbblll
parametr 1 by byl jako (cislo 1-9)
parametr bbbbblll by byl ten řetězec
A čo konkrétne ti nejde s parametrami? Test, či argc == 2 alebo nepoznáš funkciu atoi?
No, já si myslel, že to napíšu nejak takto :
Což mi bohužel nenačte, přitom, když si vytisknu promennou n, tak mihodnota sedi, co sem zadal pres parametr a k nacitani retezce pres parametr jsem se vubec nedostal (omlouvam se, ale s C teprve zacinam)
V argc máš uložený počet parametrov, v argv ich hodnoty. Na prvej pozícii (s indexom 0) je spúšťaný program. na ďalších sú samotné parametre.
Takže najprv skontroluješ, či máš správny počet parametrov a prípadne vypíšeš rozumné hlásenie:
Z argumentov vytiahneš hodnoty, pričom na konverziu z reťazca do čísla použiješ funkciu atoi:
(Input bude tým pádom deklarovaný ako char *input namiesto char input[MAX].)
Tak čísla mi funguji přes parametry ok, ale vystup mi nějak zlobí
Takhle jsem to pozměnil
Ale na vystup mi to vždy vypíše " h ("
char *input, output[MAX];
input = argv[3]; (Trojka tam má být, přidal sem ještě jeden parametr)
printf(input);
Tak mi to normálně vytiskne ten parametr, tak nevim, kde je chyba
Nechce sa mi to tu citat cele ale ked programator nevi kde je chyba, tak si to zdebuguje (odkrokuj si program riadok po riadku a sleduj premenne). Debugger ma kazde vyvojove prostredie tak sa to konecne nauc pouzivat (menu start debugging, a nastav si tam aj niekde parametre prikazoveho riadku).
je hovadina. Kto za teba ma previest string na integer? pouzi atoi.
Nesedi. Skus pochopit rozdiel medzi znakom (stringu) a cislom. Na to je dobre vediet co to je ASCII tabulka, www.google.com. Aby si vedel ze znak "1" nema hodnotu 1, ale 49.
A ked chces nejaku radu tak sem musis skopirovat kompletny program a napisat co to robi zle.
Vycházím z toho (spuštěno s parametry: 3 blablabla):
Ale chci vkládat řetězec parametrem, tak udělám toto (tučné řádky změněny a opět spuštěno s parametry 3 blablabla):
a na vástupu mi vyjde "h (" místo "2bla"
na vystupu vyjede h ked ten program spustis s jakymi parametrami? (opis sem presne do bodky commadline jake parametre tam davas. Oddelil si tie 2 parametre medzerou? T.j.
program.exe cislo medzera string ?)
Inac problem tam mas ten, ze
in = input
je pred
input = argv[2];
co je samozrejme zle, in=input musi byt az potom.
P.S. resp. v tvojom pripade uz nepotrebujes premennu input vobec.
Díky moc, opravdu je to tímto:
Jestli bych mohl poprosit ještě o jednu věc, potřeboval bych poradit jak (okomentovat), jednotlivé řádky programu, nemyslím to, jak se dělají komentáře, ale obsah koméntáře, aby to bylo srozumitelné i pro neznalé programování? Prože absolutne nevim, jak nejake veci popsat, aby to otec, který se chce učit programovat pochopil...
to si nemal celu definiciu *in a *out dat za to, len priradenie in=input. idealne ked premennu input uplne vyhodis, je pouzita predsa len raz a to zmenis na in. To co mas neni konformne s ANSI C.
A mas tam dat aj kontrolu na pocet parametrov.
Pri vystupe by sa hodila aj kontrola na MAX, ale to sa mi robit nechce.
Kometnar moze robit len ten kto ten program chape. A potom nema problem urobit komentar. Takze si spusti google.com a pochop co robi kazdy riadok a potom mozes okomentovat kazdy riadok.
P.S. komentar by mal obsahovat len to co NENI v kode. T.j. ak mam kod in=argv[2] tak je hovadina pisat komentar "priradime argv[2] do in" ptz to predsa kazdy vidi z kodu, ale komentar na tomto mieste moze obsahovat ze preco potrebujem vobec nejake in, t.j. napr. komentar by tam bol "priprava startovacieho pointra pre hladanie zhody stringov" apod. Ako pisem musis to najprv CHAPAT ze preco tam je kazdy riadok a preco by to neslo bez neho.
Díky všem zučastněnym za pomoc, považujte to tedy za vyřešené, dík moc