begin process at 2012 05 28 11:02:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Compression, Split & Cryptage

 > 

aide code mot anagramme


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

aide code mot anagramme

mardi 30 décembre 2008 à 11:01:53 | aide code mot anagramme

sahbibenayed

bonjour;
je travaille sur borland C++;
je souhaite coder un programme permattant de scanner une chaine de caractere, puis afficher dans chaque ligne les mots anagrammes, si un mot n'as pas de mots anagramme il sera affiché seul, chaque mot sera affiché une seule fois.
en faite j'ai deux probleme :
1
le code ne marche pas pour certains cas (je ne sais pas pourquoi) exemple "le bonjour le" ou "le el"
=> il y a un probleme si le dernier mot est anagramme.
2
le dernier do while ne marche pas :(

voici le code :
# include <stdio.h>

// fonction init permettant d'initaliser le tableau de pointeur par les mots separrés d'espace blanc
// et retourne le nombre de mot
int init (char T[], char *p[])
{
int i=0,j=1;
p[0]=T;
while (T[i] != '\0')
   {
   if (T[i] == ' ' && T[i+1] != ' ' && T[i+1] != '\0')
      {
      p[j]=T+i+1;
      j++;
      }
   i++;
   }
return j;
}
//fonction permettant d'afficher les mots pointés par le tableau de pointeur
void ecrire (char *p)
{
printf("\n");
while (*p!=' ' && *p!='\0')
   {
   printf("%c",*p);
   p++;
   }
}
//fonction permettant d'afficher un seul mot
int ecriremot (char x[], char *p[])
{
int i,j,trouve=0;
for (i=0;p[i]!='\0';i++)
   {
   if (p[i]==x)
   trouve=1;
   }
if (trouve==0)
   for (j=0;x[j]!=' ' && x[j]!='\0';j++)
      {
      printf("%c",x[j]);
      }
return trouve;
}
//fonction permettant d'ajouter l'@ d'un mot a la liste des mots deja traité
void ajoutmot(char x[], char *p[], int i)
{
p[i]=x;
p[i+1]='\0';
}

//fonction permettant d'assurer que chaque mot sera traité une seule fois sinon retourne 0
int dejavu(char x[], char *p[])
{
int trouve=0,i;
for (i=0;p[i]!='\0';i++)
   {
   if (p[i]==x)
   trouve=1;
   }
return trouve;
}
// fonction permettant de tester si deux mots ont la meme longeur
int longuer(char mot1[], char mot2[])
{
int memelonguer=0,i,j;
for (i=0;mot1[i]!=' '&&mot1[i]!='\0';i++);
for (j=0;mot2[j]!=' '&&mot2[j]!='\0';j++);
if (i==j)
   return memelonguer=1;
   else
   return memelonguer;
}

//fonction permettant de degager le code ascii d'un mot et le mettre dans un tableau caractere par caractere
int flag(char mot1[],char mot2[])
{
int flag1[27],flag2[27];
int i;
int indexcaractere;
int anagramme=1;
for (i=0;i<27;i++)    // initialisation des deux tableaux flag
   {
   flag1[i]=flag2[i]=0;
   }
for (i=0;mot1[i]!=' ' && mot1[i]!='\0';i++) // remplissage du tableau flag1 par le nombre de lettre du mot1 selon l'index de chaque lettre
 {
   indexcaractere = mot1[i]-97;
   flag1[indexcaractere]++;
   }
for (i=0;mot2[i]!=' ' && mot2[i]!='\0';i++) // remplissage du tableau flag2 par le nombre de lettre du mot2 selon l'index de chaque lettre
 {
   indexcaractere = mot2[i]-97;
   flag2[indexcaractere]++;
   }
for (i=0;i<27;i++)
   {
   if (flag1[i]!=flag2[i])
   anagramme=0;
   }
return anagramme;
}

//fonction permettant d'afficher le mot anagramme
void anagramme(char chaine[],char *p[])
{
int i,j,l,k,g=0,ana,temp;
char *q[100];
q[0]='\0';
l=init (chaine,p);
printf("\n les motes de votre chaine : ");
for (i=0;i<l;i++)
   {
   ecrire (p[i]);
   }
printf("\n\nles mots anagrammes :\n");

for (i=0;i<l-1;i++)
      {
      ecriremot (p[i],q);
      for (j=i+1;j<l;j++)
          {
          k=longuer(p[i],p[j]);
          ana=flag(p[i],p[j]);
          temp=dejavu(p[i],q);
          if (k&&!!ana)
             {
             if (temp==0)     // pour ne pas inserer des espace vide au debut des mots non anagramme
             printf(" ");
             ecriremot (p[j],q);
             ajoutmot(p[j],q,g);
             g++;
             }
           }
       if (temp==0)
       printf("\n");
      }
ecriremot (p[l-1],q);                       // cas dernier mot de la chaine n'est pas anagramme
printf("\n le nombre de mots : %d",l);
}

void lirechaine(char T[])
{
int i=0,k=0,j=1;
printf("\n entrer votre chaine \n");
do
 {
   scanf("%c",&T[k]);
   k++;
   }while (T[k-1] != '\n');
T[k]='\0';

}

void main()
{
int i;
char *x;
char chaine[100];
char *p[100];
do
 {
   lirechaine(chaine);
 anagramme(chaine,p);
   printf ("\n donner votre choix \n0 pour sortir\n1 pour repeter\n");
 scanf("%d",&i);
   }while (i==1);

}

mardi 30 décembre 2008 à 14:42:26 | Re : aide code mot anagramme

sahbibenayed

bonjour;
es ce que quelqu'un peut m'aider pour le
do
while
dans le main ?
le programme fait de nouveau l'appel au fonction mais ca ne marche pas : pas d'attente des scanf :( je sais que ca parrait debutant un tel probleme mais je suis planté
mardi 30 décembre 2008 à 17:47:34 | Re : aide code mot anagramme

goodboy21

pour commencer tu utilise mal ton char*p[100];
soit tu lui alloues de la mémoire comme ça: char*p=new char[10][100] qui te crée un tableau de 10 chaine de caractères dont chaque chaines contient 100 caractères. étant données que tu n'as pas l'air très à l'aise ac les pointeurs déclare le comme ceci char p[10][100].
ensuite pour connaitre la longueur d'une chaine utilise "strlen(..);


Cette discussion est classée dans : int, mot, for, char, anagramme


Répondre à ce message

Sujets en rapport avec ce message

Hachage fermé problème de lecture [ par mcflysupersonic ] Bonjour je suis nouveau sur le forum est ceci est ma première question donc j'espère que je ne me suis pas trompé d'endroit pour poster.Voilà j'ai un Fatal signal: Segmentation Fault (SDL Parachute Deployed) [ par broks ] Je ne comprends vraiment pas pourkoa ca ne marche pas...C'est surement un probleme au niveau de la fonction saisi puisque je plante lorsque je dois sa Probleme dans mon programme password [ par Jarod1980 ] Salut tout le monde,Voilà j'ai un problème dans mon programme de password. Je m'explique: J'ai développé en premier lieu un programme où l'utilisateur Probleme dans mon prog password dans la gestion ' * ' [ par Jarod1980 ] Salut,Voila j'ai développé un programme de password qui récupère le password crypté dans un fichier et le compare au password rentré par l'utilisateur Pendu en C [ par the_kaiser ] Voila je suis débutant en C (en programmation tous cours d'ailleurs puisque le C est le premier language que je teste) et je tente de faire un pendu. Problème en tête bitmap [ par piroman14 ] Slt tt le monde!Je rencontre un petit problème dans mon algorithme. En effet, je n'arrive pas à coder l'en-tête d'une image bitmap correctement. J'obt matrice de caractere en c [ par flofloo ] slt tout le monde voici mon probleme : char **Init_Matrice_IrcMSG(int ligne,int colone){     char **mat = NULL;     int i;     mat = AIDE [ par alex64100 ] BOJOUR je dois coder un correcteUr d'orthographe mon code est truffé d'erreurs, j'ai du mal à les corriger svp aidez-moi #include #include #inclu Allocation dynamique tableau 2D : erreur de seg [ par noname001 ] Bonjour à tous, [^^happy13] j'aimerais faire appel à vos lumières concernant deux codes. Ils ont tous les deux pour but de créer un tableau 2D dynami


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,326 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales