Fonction tri

Signaler
-
Messages postés
3838
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 février 2021
-
Bonsoir à tous !

Je suis en train de faire un programme en langage C ayant pour but de montrer si deux mots sont des anagrammes.
Je suis débutante et j'ai un problème au niveau de la fonction pour trier les chaines par ordre alphabétique ... J'ai cru comprendre qu'il fallait créer une sous fonction mais je ne vois pas trop comment m'y prendre ...

Merci d'avance !

7 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
aucun besoin de trier pour savoir si anagramme.

ciao...
BruNews, MVP VC++
Messages postés
3838
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 février 2021
119
Bonjour.

Comme dit Brunews, pas besoin de trier. Je te donne un indice: deux mots sont des des anagrammes s'ils ont le même nombre d'occurences pour chaque lettre.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
J'ai essayé cela :

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define max 256

typedef enum{faux, vrai} bool;

void tri (char ch[], int n)
{
int i, j;
char temp;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(strcmp(ch[i], ch[j])<0)
{
temp=ch[i];
ch[i]=ch[j];
ch[j]=temp;
}
}

bool anagrammefonction(char* chaine1,char* chaine2)
{
int i, n;
n=strlen(chaine1);
bool anagramme=faux;

if (n==strlen(chaine2))

{
tri(*chaine1,n);
tri(*chaine2,n);
i=1;
do
{

if ((chaine1[i])!=(chaine2[i]))
{
anagramme=vrai;
}
i++;
}while ((i<n) && (anagramme==vrai));
return vrai;

}
else
return faux;

}



int main()
{
char ch1[max], ch2[max];

printf("Entrer les chaînes de caractères à comparer\n");
scanf("%s%s", ch1,ch2);

if (anagrammefonction(ch1,ch2))
printf("Les chaînes de caractères sont des anagramme.\n");
else
printf("Les chaînes de caractères ne sont pas des anagrammes.\n");
return 0;
}

mais j'ai un problème au niveau de la fonction tri :/
Messages postés
3838
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 février 2021
119
mais j'ai un problème au niveau de la fonction tri :/

Si tu n'écoutes pas ce qui est dit, y a un moment, on ne peut plus faire grand chose pour toi... (Pas besoin de fonction de tri).

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Je ne connais pas l'occurence et mon professeur nous impose cela ...
Sauf que lui il utilisait une fonction "ordrealphabétique" qui n'existe pas.
Si vous voulez m'expliquer l'occurence je veux bien parce que ça fait deux mois que je fais du langage c donc mon niveau de connaissance et très limité.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
strcmp() prend des pointeurs de chaine en param, PAS DES OCTETS.

Tu dois faire
if(ch[i] > ch[j])
ou
if(ch[i] < ch[j])

ciao...
BruNews, MVP VC++
Messages postés
3838
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 février 2021
119
Je ne connais pas l'occurence



C'est du français pourtant... (http://www.larousse.com/en/dictionnaires/francais/occurrence/55515)
Pour simplifier, une occurence, c'est le nombre de fois que tu trouves quelque chose.
Dans le mot patate, il y a 1 occurence de P, 2 occurences de a, 2 occurences de t et 1 occurence de e.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question