Page 1 sur 1

problème création suite de mot

Posté : 17 août 2008, 14:29
par sophie1812
Bonjour,

J'ai un problème avec le PHP, je ne sais pas comment je pourrais faire pour arriver à générer le mot suivant et précédent d'un mot.

Je m'explique :

Prenons par exemple le mot "mot",
je cherche à faire un script qui puisse m'afficher le mot suivant : "mou" (après "t" c'est "u" dans l'alphabet)
Puis ce meme script doit m'afficher le mot précédent : "mos" (avant "t" c'est "s" dans l'alphabet)


Mais il faudrait prendre en compte les 4 cas particuliers suivant quand c'est "z" ou "a" :

1- exemple, le mot est "moz"
mot suivant : "mpa" (on incrémente "z" en "a" et "o" en "p")

2- exemple le mot est "zzz"
mot suivant : "aaaa" (on incrémente successivement les "z" en "a" et on ajoute un "a" au début du mot)

3- exemple le mot est "moa"
mot précédent : "mnz" (on décrément "a" en "z" et "o" en "n")

4- exemple le mot est "aaaa"
mot précédent : "zzz" (on décrémente successivement les "a" en "z" et on supprime le "z" au débutdu mot)


Avez vous une idée de script pour réaliser ce problème. je réfléchie de mon coté également.

Merci

Posté : 17 août 2008, 14:36
par Patriboom
As-tu déjà du code dans lequel insérer ces conditions et exigences ou pars-tu en neuf?

Si t'as du code, montre-le nous ici.


Autrement, ce peut être assez simple avec quelques boucles et l'alphabet monté en Array.
Pour simplifier le code, je te suggère de monter un tableau comme ceci:
$Lettres = Array("z","a","b",..."y", "z","a");
Il suffit alors d'appeler les lettres selon leur rang habituel (a étant 1, b étant 2, z étant 26) et la précédante en soustrayant 1, la suivante en additionnant autant.

Posté : 17 août 2008, 14:41
par sophie1812
je n'ai pas de code pour le moment puisque c'est là mon soucis, je ne vois pas comment monter mes boucles.

Ton idée me parait intéressante, par contre je ne vois pas comment je pourrais faire ça avec des boucles.

Tu as une proposition qui marche ?

Posté : 17 août 2008, 16:01
par Patriboom
Je ne sais pas ce que tu veux faire, à lire les quelques lignes ci-haut, tu sembles vouloir produire des mots de différentes longueurs. À vue de nez, voici une piste:
$Lettres = array( ... liste des éléments alphabétiques, numériques ou symboliques);
$CeMot = Array();

for ($y=1; $y<=Nombre max de lettres; $y++) {
   $CeMot = "";
   for($x=1; $x<count($Lettres); $x++) {
          for ($z=0;$z<$y;$z++) {
               $CeMot .= $Lettres[$z];
          }
          echo "Voici le mot généré: ".$CeMot.$Lettres[$x];
          echo " ... précédé de :".$CeMot.$Lettres[$x-1];
          echo " ... suivi de : ".$CeMot.$Lettres[$x+1];
          echo "<br>";
   }
}
Rappelle-toi que le présent forum en est un d'entraide. Il ne faut pas penser que nous ferons tout le code pour toi. Il faut que tu y mettes du tien un peu.

D'ailleurs, il y a une erreur logique dans le traitement de construction de $CeMot (boucle $z) que tu devras trouver et résoudre.

Posté : 17 août 2008, 17:04
par sophie1812
ça ne fonctionne pas comme je le voudrais par contre moi j'ai cherché et voila ce que j'ai trouvé :

imaginons qu'au départ on parte avec le mot "arbre"

$mot = "arbre";
echo ++$mot;

Et là ça m'affiche bien le mot suivant qui est : arbrf

Par contre le soucis que j'ai c'est que pour le mot précédent j'ai voulu faire en toute logique : --$mot
mais là ça ne marche pas.

Donc ma question (après avoir cherché !), existe t'il une fonction ou un script capable de faire une décrémentation d'une chaine de caractère comme le fait ++$mot pour l'incrémentation ?

Merci

Posté : 17 août 2008, 19:48
par Hywan
Hey :),

Il n'existe pas de surcharge d'opérateur en PHP.
J'ai regardé du côté de la SPL, mais je n'ai rien trouvé. Tu ne peux pas faire comme ça.

Posté : 17 août 2008, 19:58
par sophie1812
Si si j'ai testé pour l'incrémentation d'une chaine de caractère et ça fonctionne :

$mot = "arbre";
echo ++$mot;

ça m'affiche bien "arbrf"



Le petit soucis que j'ai et c'est pour cela que j'ai besoin d'aide c'est que je cherche à faire une décrémentation également, mais "--$mot" ne fonctionne pas.

Connaissez vous une fonction ou un script pouvant faire la meme chose que "++$mot" mais en décrémentation de chaine de caractère.

Merci

Posté : 17 août 2008, 20:05
par Aureusms
Une petite idée rapide :

1. Tu mets tout tes mots de même longueur comparé avec strlen() dans un tableau
2. Tu tries ton tableau avec sort()
3. Tu compares la clef retournées avec array_keys()
4. Si clef du mot n°1 est plus grande que clef du mot n°2 : mot n°1 est suivant par rapport à mot n°2
5. Tu fais de même pour tout tes longueur de mots

Posté : 17 août 2008, 20:30
par AB
Si si j'ai testé pour l'incrémentation d'une chaine de caractère et ça fonctionne :

$mot = "arbre";
echo ++$mot;

ça m'affiche bien "arbrf"



Le petit soucis que j'ai et c'est pour cela que j'ai besoin d'aide c'est que je cherche à faire une décrémentation également, mais "--$mot" ne fonctionne pas.

Connaissez vous une fonction ou un script pouvant faire la meme chose que "++$mot" mais en décrémentation de chaine de caractère.

Merci
Ben comme Hywan a vérifié j'ai tendance à le croire. Ton exemple fonctionne parce que tu as du bol
mais si l'on fait

$var = 'tataz';

echo ++$var;

ça affiche "tatba"

Posté : 17 août 2008, 20:48
par Hywan
Bah c'est correct. z + 1 = a, et on a une retenu de 1, donc a + 1 = b, soit tataz + 1 = tatba. Pour le --, je ne sais pas pourquoi ça marche pas.
Une chaîne de caractère, c'est juste un tableau de caractère. Bizarre déjà que le ++ fonctionne :?.

Posté : 17 août 2008, 21:56
par Sékiltoyai
Euh, au passage, avant d'avancer des méthodes ultra complexes, l'opérateur modulo ( % ), ca existe…

Posté : 18 août 2008, 02:02
par sophie1812
moi aussi j'étais étonnée de voir que ++$mot fonctionne tout à fait comme je le voulais !

Mais je n'arrive toujours pas à comprendre pourquoi --$mot ne fonctionne pas !!

Quelqu'un a une idée ou une solution intermédiaire à proposer sur ce forum ?

Posté : 18 août 2008, 11:58
par Hywan
Bah il faut juste te faire tes fonctions. ++ sur une chaîne de caractères est toléré par le langage, mais pas --. Conclusion : faire ses fonctions.

Une chaîne est un tableau, ne l'oublie pas (voir str_split()). Tu peux donc inverser les tableaux, les trier, et tout le toutime.
Essaye d'écrire un algorithme sur papier, tente de le coder, et on t'aidera pour avancer. Il y a plusieurs façons de procéder et je n'ai pas réfléchit à la meilleure. Donc choisis-en une qui te convient, et on l'étudiera avec toi :).