Hei
Teen Javalla sanapeliä, ja tarvitsen siihen metodia joka tutkii kuinka monta yhteistä merkkiä kahdessa merkkijonossa on.
public static int montaOikein(String oikea, String ehdotus) { int onko = 0; int monta = 0; for(int i=0; i<oikea.length(); ++i) { onko = ehdotus.indexOf(oikea.charAt(i)); if(onko >= 0) { monta++; } } return monta; }
Ylläoleva koodi toimii muuten, mutta esimerkiksi argumentin arvoilla "juupas" ja "jups" palauttaa metodi arvon 5, vaikka sen pitäisi palauttaa vain 4. Osaisiko joku neuvoa, missä mättää?
Sanassa "juupas" on u kaksi kertaa, tarkistat sen siis kahdesti tuossa myös. Kannattaa ensin silpoa sana sellaiseksi, ettei siinä ole kahta tai useampaa samaa merkkiä, ja sitte vasta ajaa ton tarkistuksen läpi.
Varmasti toimiva mutta hidas periaate. Toivottavasti syntaksi on Javaa :)
String merkit = "abcd...åäö"; // Mitä sitten haluatkaan... int i, j, m, n, maara; maara = 0; // Jokainen tarkistettava merkki for (i = 0; i < merkit.length(); i++) { // Koko sana läpi, lasketaan tämän kirjaimen esiintymät for (j = 0; j < oikea.length(); j++) { if (oikea.charAt(j) == merkit.charAt(i)) { m++; } } // Sama toiselle for (j = 0; j < ehdotus.length(); j++) { if (ehdotus.charAt(j) == merkit.charAt(i)) { n++; } } // Pienempi määrä tätä kirjainta on yhteinen määrä if (n < m) { m = n; } maara += m; }
Jos nyt oikein ymmärsin, niin nopein tapa on laittaa merkit taulukkoon tähän tyyliin, PHP:
<?php $str1 = "saippoja"; $str2 = "keittoja"; $chr = array(); // taulukon täytyy olla 256 soluinen, ja jokaisen alkion arvo nollaksi $maara = 0; $len = strlen($str1); for($u = 0; $u < $len; $u++){ $chr[$str1[$u]] = 1; } $len = strlen($str2); for($u = 0; $u < $len; $u++){ if($chr[$str2[$u]]){ $maara++; $chr[$str2[$u]] = 0; } } print"$maara"; ?>
mod. korjasi T.M.:n ilmoittaman virheen
Mitäs ihmettä? eilen yritin lähettää viestiä monta kertaa, mutta ei vaan lähettänyt, näemmä se lähetti sittenkin viestin, mutta myöhässä. Jes, eikä voi enää muokata viestiä. Sillä tuossa koodissa on virhe, eli siihen täytyy laittaa
$maara++; // tämän jälkeen... $chr[$str2[$u]] = 0; // tämä
Aihe on jo aika vanha, joten et voi enää vastata siihen.