Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: sana toisinpäin

Sivun loppuun

AtteKoo [14.12.2008 11:10:06]

#

Terve. Olen opetellut vasta vähän aikaa php-ohjelmointia ja eteen on tullut ongelma. Eli tarkoitus on tehdä lomake, johon voi kirjoittaa lauseen/sanan ja kyseinen lause/sana tulee näkyviin takaperin eli palidromina.

Eli kirjoitan sanan ANNA textfieldiin ja painan Submit -näppäintä, niin sanan pitäisi ilmestyä takaperin jolloin se on ANNA. (Palidromi)

Kirjoitan sanan JEESUS textfieldiin niin tulee lukemaan SUSEEJ. (Ei ole Palidromi)

Miten saan tehtyä php-koodin joka toimii tällä tavoin???

Kiitos

trilog [14.12.2008 11:27:11]

#

PHP:ssa on tähänkin asiaan funktio, strrev.

Tosin lauseen kääntäminen takaperin ei (yleensä) palindromeja tee.

Grez [14.12.2008 15:42:46]

#

Siis eihän tuossa tarvitse tehdää mitään jos se on palindromi.

Matso [14.12.2008 16:48:58]

#

Tää on hyvä ohjelmoinnin perusharjotus. Kannattaa harjotuksen vuoks koittaa ratkasta ilman valmisfunktiota :)

Short Php [14.12.2008 18:55:43]

#

Ja vinkkinä for ($i = count($sana); $i > 0; $i--) ;)

Laitinen [15.12.2008 00:26:17]

#

Strlen kuulostaisi mielestäni paremmalta funktiolta tähän kuin count. Vähäinen PHP-osaamiseni muistelisi että seuraava palauttaisi ykkösen sanan pituuden sijaan:

<?
$sana = "sana";
echo count($sana);
?>

Lisäksi php:ssa alkaa indeksointi nollasta, ja strlen($sana) viittaisi yli tuosta sanasta. Lisäksi itse kävisin silmukalla läpi vain puolet sanan alkioista ja swappailisin eri päistä kirjaimia. Voihan toki olla että olet hakenut vain jotain erilaista ratkaisua jota en nyt ymmärrä.

EDIT: Ja jotta vastaisin alkuperäisellekin kirjoittajalle, niin voisin selventää mitä sinun kannattaa tehdä jotta saat sanasi käännettyä. En tiedä paljonko tiedät PHP-ohjelmoinnista, mutta seuraava koodinpätkä kertonee sinulle jotain:

<?
$kaannettava = "sananen"; // muuttuja, joka sisältää itse sanan
echo "$kaannettava[0],$kaannettava[1]\n"; // [numero] viittaa sanan numeronnenteen kirjaimeen, jossa indeksointi alkaa 0:sta ykkösen sijaan

// sitten kirjaimien vaihto keskenään
$toinen = "ab";
$piv = $toinen[0]; // tallennetaan ensimmäinen kirjain väliaikaismuuttujaan
$toinen[0] = $toinen[1];
$toinen[1] = $piv;
echo "$toinen\n"; // kääntö onnistui \o/
// huomioi väliaikaismuuttujan käyttö, sillä jos vaihto olisi tehty suoraan seuraavaan tyyliin:
$toinen = "ab";
$toinen[0] = $toinen[1];
$toinen[1] = $toinen[0];
echo $toinen;
// olisi merkkijonosta tullutkin "ba":n sijasta "bb".
?>

Huomaathan, että pitempien sanojen kääntäminen ei koodinpätkälläni onnistu, vaan joudut käyttämään silmukkarakennetta apuna.

EDIT2: Pistin tagit kuntoon

Grez [15.12.2008 01:31:30]

#

Kuten jo edellisellä viestilläni yritin vihjailla, niin mikäli tämä liittyy palindromeihin, niin pelkästä stringin kääntämisestä toisinpäin (joka onnistuu PHP:n valmiilla funktiolla) ei ole paljoa hyötyä.

Jos halutaan toteuttaa palindromitesteri, niin sitten teksti pitää kääntää ympäri ja verrata alkuperäiseen ja sanoa että "joo, hieno palindromi" jos se täsmää ja "ei nyt mennyt ihan putkeen" jos ei. Tässä kannattaa huomioida että yleensä palindromissa hyväksytään välilyöntien ja välimerkkien "siirtyminen" käännettäessä.

Eli siis esimerkiksi seuraava on OK
"Ella ja jano tuloo, sinä älykäs Atteni, aika huikan ööliä sai Taru Ratia säilöön, Aki U haki ainetta Säkylään, iso olut on ajajalle."
vaikka se onkin kääntäen
".ellajaja no tulo osi ,näälykäS attenia ikah U ikA ,nööliäs aitaR uraT ias äilöö nakiuh akia ,inettA säkylä änis ,oolut onaj aj allE"

Itse tekisin niin, että muuttaisin annetun merkkijonon pieniksi kirjaimiksi, poistaisin kaikki muut paitsi a-zåäö ja sitten katsoisin onko esim. $t sama kuin strrev($t).

AtteKoo [15.12.2008 10:21:45]

#

Nyt en saa tota tekstifieldiä toimimaan, niin että siihen kirjoitettava sana kääntyy.. Eli käytin tota Strrev-komentoa..

Eli Dreamweaverilla laitoin siellä Desing puolella Formin, jonne lisäsin textfieldin ja buttonin. OK?

Malli

Eli tämmönen kutakuinkin pitäisi saada tehtyä

Metabolix [15.12.2008 13:33:17]

#

Mitä teit ja mikä meni pieleen?

AtteKoo [16.12.2008 12:38:33]

#

Meni hermot ja löysin täältä valmiin palindromin tarkistajan, mutten saa sitä toimimaan..

Jos joku viitsisi vähän neuvoa..

<body>
<form id="form1" name="form1" method="post" action="">
  <p>Anna sana tai lause
    <label>
    <input type="textfield" name="teksti" id="teksti" />
    </label>
  </p>
  <p>
    <label>
    <input type="submit" name="button" id="button" value="Paina" />
    </label>
  </p>
  <p>&nbsp;</p>

</form>




<?php
$teksti=$_POST['teksti'];




function onko_palindromi($teksti) {
    $kirjaimet = "abcdefghijklmnopqrstuvwxyzåäö";
    $teksti = strtolower($teksti); //muuttaa suuret kirjaimet pieniksi

	for ($i = 0; $i < strlen($teksti); $i++) {

		if (strstr($kirjaimet, $teksti[$i])) {
            $pelkät_kirjaimet .= $teksti[$i];
            //echo $pelkät_kirjaimet;
        }
    }
    $käännetty = strrev($pelkät_kirjaimet); //kääntää kirjaimet käänteisiksi
    if ($pelkät_kirjaimet == $käännetty) { $onko_palindromi = TRUE; } else { $onko_palindromi = FALSE; }

	return array($tekst, strrev($tekst), $onko_palindromi);
}

$pal = $_GET["p"];
$tulokset = onko_palindromi($pal);

if ($tulokset[2]) { //jos kyseessä on palindromi
    echo $tulokset[0] ."<br>"; //tulostetaan mahdollinen palindromi
    echo $tulokset[1] ."<br>"; //tulostetaan mahd. palindromi käännettynä
    echo "On palindromi!";
}
else {
    echo $tulokset[0] ."<br>"; //tulostetaan mahdollinen palindromi
    echo $tulokset[1] ."<br>"; //tulostetaan mahd. palindromi käännettynä
    echo "Ei ole palindromi...";
}
?>


</body>

Kiitos..
p.s eli en saanut tässäkään toimimaan tuota button-painiketta, mitään ei tapahdu kun tekstikenttään jotain kirjoittaa..

Mod. lisäsi kooditagit

Chiman [16.12.2008 13:02:22]

#

Virhe löytyy näiltä riveiltä:

$teksti=$_POST['teksti'];
// ...
$tulokset = onko_palindromi($pal);

Teuro [16.12.2008 13:34:30]

#

Chiman kirjoitti:

Virhe löytyy näiltä riveiltä:

$teksti=$_POST['teksti'];
// ...
$tulokset = onko_palindromi($pal);

Vai luuletko että rivi

AtteKoo kirjoitti:

<form id="form1" name="form1" method="post" action="">

olisi myös virheellinen. On toki totta, että tuossa koodissa on huomattavan paljon korjattavaa, jotta tuosta saisi toimivan.

Metabolix [16.12.2008 13:36:07]

#

Teuro kirjoitti:

Vai luuletko että rivi

AtteKoo kirjoitti:

<form id="form1" name="form1" method="post" action="">

olisi myös virheellinen.

Luuletko sinä? Minä en. Sen sijaan mainitsisin ehkä nämä rivit:

<input type="textfield" name="teksti" id="teksti" />
$pal = $_GET["p"];

Teuro [16.12.2008 14:09:26]

#

Itse asiassa olen ollut siinä virheellisessä uskossa, että action kohdassa tulisi olla lomakkeen kohdetiedoston sijainti. Ilmeisesti pelkät lainausmerkit riittävät ilmoittamaan, että lomake käsitellään samassa tiedostossa.

Lebe80 [16.12.2008 14:11:20]

#

Sitten jatkokehitystä:

Eikös ole mahdollista myös se, ettei palindromissa ole pakko olla välit samoissa kohdissa?
Esim. "Oi suullinen illuusio" on myös mielestäni palindromi, vaikkei tietääkseni se olekaan takaperin täysin sama: "oisuulli nenilluus iO".

Matso [17.12.2008 15:06:32]

#

Lebe80 kirjoitti:

"oisuulli nenilluus iO"

Mitä toi tarkottaa?

Lebe80 [17.12.2008 15:21:20]

#

Matso: se on palindromi, jossa välilyönnit on vain takaperin eri kohdissa. Silti siinä lukee takaperin myös "oi suullinen illuusio".


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta