C-ben (vagy pszeudokóddal leírva) hogyan lehet egy string karaktereit megkeverni?
A házink egy szókitalálós játék. Első lépés hogy egy karaktertömböt inicializáljunk és válasszunk ki ebből egy véletlenszerű stringet. Ezt meg is tudtam oldani, stringtömbbel is, meg pointer tömbbel is.
Ahol elakadtam hogy ezen tömb karaktereit véletlenszerűen kellene összekeverni. srand(time(0));-val tudok random értéket generálni. Nekem az volt az elképzelésem hogy fogom a forrás stringet(ami ugye már ez a random kiválasztott szó) és ebből random pozíciókat sorsolva elkezdem átmásolni az összekevert szót tartalmazó stringbe karakterenként, szépen sorban(0. indexre sorsolok valamit random aztán 1. indexre …). Ugye ezzel az a gond hogy így 1 karaktert többször is kisorsolhatok(pl "alma" lehet hogy "aaaa" lesz. Gondoltam hogy elkezdem vizsgálni a karaktereket hogy voltak-e már sorsolva, de az meg azért nem jó mert ha van egy olyan szó amiben egy karakter kétszer szerepel. Pl "alma" akkor az a-betű egyszer lesz kisorsolva(és lesz pl "lma"). Most akkor más feltétel kellene vagy teljesen rossz a gondolatmenetem?
Példák, ha valaki nem értené: "alma" szóra generálja mondjuk azt hogy "lmaa" vagy azt hogy "laam" …
Esetleg még egy olyan feltétel se lenne rossz hogy az összekevert szó, ne egyezzen meg az eredetivel azaz "alma" szóra nehogy véletlenül "alma"-t dobjon ki.
A #2-es algoritmusa nem tudom hogy jön ide..
Inkább a Fisher–Yates shuffle algoritmust használd, ami igazából csak annyit csinál, hogy végig megy az elemeken es egy véletlen szerű még nem érintett elemmel felcseréli. Baromi egyszerű, nincs szükség annak a vizsgálatára, hogy már kiválasztottuk-e az adott elemet. [link]
Persze a végén megnézheted, hogy ugyanaz-e az eredmény, mint eredetileg, és ha igen, akkor addig ismétled amíg más nem lesz.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!