Zdravím, mám za úkol vypsat z textu nejdelší slova. Vstupem je pole s textem a z tohohle pole, musím vypsat na obrazovku slova s nejvíce písmeny. Kód celkem mám, ale je problém, že když jsou tam dvě stejně dlouhá slova, tak program vypíše jen jedno a to druhé ne, mohl by mi někdo prosím poradit, kde tuhle chybu ošetřím? Díky.
Variace na tvůj algoritmus, kde budeš ukládat do vectoru (maxword změníš na vector stringů) všechna slova se stejnou délkou jako aktuální nejdelší slovo:
1. je-li slovo delší než stávající maxword[0], vyprázdníš vector a do vyprázdněného vectoru vložíš slovo
2. je-li slovo stejně dlouhé jako maxword[0], přidáš slovo do vectoru
Po doběhnutí cyklu vypíšeš obsah vectoru.
std::vector se dá použít jako pole. Na rozdíl od pole se nemusíš starat o hlídání mezí, vector se sám realokuje a zná svou velikost.
Jestli spravne chapu ten puvodni kod, tak hleda nejdelsi slovo. Nic vic.
Prvni cast kodu hleda slovo, znaky <> ' ' (ruzne od mezery).
Druha cas potom porovnava delku slova s max velikosti.
Druha cast by mela slova ukladat do pole. Muzes si tam poznacit jako 'delku nejkratsiho slova'. Kdyz tu delku prekroci tve slovo, tak spustit kod, ktery slovo prida do pole a soucasne odstrani nejmensi slovo z pole, opravi promennou 'delku nejkratsiho slova'.
Nebo muzes proste slova ukladat do pole, pole seradit podle delky, nejdelsi nahore. A vybrat prvnich 10 slov.
Děkuji za rady, ale bylo by pro mě lepší, to upravit pro ten můj kód. Jsem začátečník a je pro mě lepší nějaký krátký srozumitelný kód, než nějaký "profesionální". Můžu z Vás teda někoho poprosit o úpravu toho mého kódu? Já si s tím fakt už nevím rady...
#11pazdy
Prokrokuj si můj kód a zkus si ho odladit. Je to modifikace tvého kódu. Abych mohl uložit několik stejných slov, potřebuji "úložiště", jako první nápad se nabízí pole, ale jeho nevýhodou je nutnost hlídat jeho meze aby nedošlo k zápisu "za pole", tj. mimo alokovanou paměť a pokud okamžitá velikost pole nestačí, realokovat paměť. Proto jsem zvolil vector, který to má ošetřené. Takže vector slouží jako seznam nejdelších slov. Cílem podmínek v těle cyklu je:
1. je-li workingword delší, než stávající nejdelší slovo nebo slova uložená ve vectoru (stačí porovnat s prvním slovem ve vectoru, ostatní jsou stejně dlouhá), starý seznam se smaže - provede se vymazáním vectoru a do takto vyprázdněného seznamu se vloží workingword jako nejdelší. Při ladění se projeví tak, že size vectoru bude 1
2. je-li workingword stejně dlouhé jako stávající nejdelší slovo nebo slova uložená ve vectoru, přidá se k nim do vectoru. Při ladění se ti projeví jako zvětšení size vectoru.
V druhé úpravě jsem se pokusil o drobnou optimalizaci, kde se nejdříve přečte celé slovo a pak se porovnává jeho délka.
Netvrdím, že je to bez chyb. Napsat kód je jedna věc a odladit druhá. Právě proto, že jsi začátečník, by bylo dobré pokusit se kód odladit. Takto získaná zkušenost bude pro tebe cenná a trvanlivá. Takže rada zní: spustit debuger a krokovat řádek po řádku a dívat se do proměnných, co v nich je a jak se jejich obsah mění.