IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

compter mots identiques entre deux chaine


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 6
    Par défaut compter mots identiques entre deux chaine
    salut,
    je developpe un programme qui contient une fonction qui permet de calculer le nombre de mots identiques entre deux chaine passé en paramètre de la fonction.
    j'ai pas eu le résultat satisfaisant.le clacule est faux.voila le code de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    int compter_mot_identique(char *L1, char *L2,int a,int b)
    {
    	 int k=0, m=0,j=0,nb=0;
    	 int i;
     
    	 char LL1[20]="";
    	 char LL2[20]="";
     
    		  for(i=0;i<a+1;i++)
    		 {
    			 while(L1[i]!=' ')
    			 {
    				 LL1[k]=L1[i];
    				 k++;
    				 i++;
    			 }
    			 for(j=0;j<b+1;j++)
    			 {
    				 while(L2[j]!=' ')
    					  {
    						 LL2[m]=L2[j];
    						 m++;
    						 j++;
    					  }
    					if (strcmp(LL1,LL2)==0)
    						 {
    						  nb++;
    						 }
    						memset (LL2, 0, sizeof (LL2));
    						k=0;
    						m=0;
    			 }
    				memset (LL1, 0, sizeof (LL1));
    		 }
    	  return(nb);
     }
    a et b qui sont passé en paramètre sont la longueur de ch1 et ch2 respectivement.
    j'ai besoin de l'aide svp.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Janvier 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 6
    Par défaut
    de l'aide scp c trés urgent

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par narjes81 Voir le message
    de l'aide scp c trés urgent
    Oui ben désolé, on n'est pas à ton service. Après-tout, tu as un cerveau aussi non ? Lui il est à ton service. Tu n'as qu'à le mettre à contribution...

    Donc voici ce que j'ai constaté: tu fais un strcmp(LL1,LL2). Est-ce que LL1 et LL2 contiennent bien un '\0' où il faut pour que strcmp() sache où s'arrêter ?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur calcul
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Par défaut
    J'ai testé ta fonction dans ce main et j'ai pas eu de souci: il donne la bonne réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    main(void)
    {
    char *L1, *L2;
    int a,b,nb;
    L1="je ne suis pas un chat";
    L2="je suis un tigre";
    printf("L1 = %s \t L2 = %s \n",L1,L2);
    printf("L1[8] = %c\n",L1[8]);
     
    a = strlen(L1);
    b = strlen(L2);
    printf("a = %d \ b = %d \n",a,b);
     
    nb = compter_mot_identique(L1,L2,a,b);
     
    printf("nb = %d\n",nb);
    }
    Envoie le programme dans lequel tu appelles ta fonction. C'est peut-être là qu'est ton problème.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 6
    Par défaut
    Citation Envoyé par Anthony_CTI Voir le message
    J'ai testé ta fonction dans ce main et j'ai pas eu de souci: il donne la bonne réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    main(void)
    {
    char *L1, *L2;
    int a,b,nb;
    L1="je ne suis pas un chat";
    L2="je suis un tigre";
    printf("L1 = %s \t L2 = %s \n",L1,L2);
    printf("L1[8] = %c\n",L1[8]);
     
    a = strlen(L1);
    b = strlen(L2);
    printf("a = %d \ b = %d \n",a,b);
     
    nb = compter_mot_identique(L1,L2,a,b);
     
    printf("nb = %d\n",nb);
    }
    Envoie le programme dans lequel tu appelles ta fonction. C'est peut-être là qu'est ton problème.

    merci de votre réponde

    j'ai un petit souci,je pense que l'appel sucessive de fonction "compter_mot_identique" peut etre la cause.

    dans le main j'appelle la fonction plusieurs fois et j'ajoute aussi que les chaine L1 et L2 passé en paramètre sont alloué dynamiquement dans le main.voila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
       1. int main()
       2. {
       3. int compter_mot_identique(char*, char*,int ,int );
       4. int nb_foot=0,nb_cyclisme=0;
       5. char*ch1,*chaine;
       6. long lsize;
       7. int carac=0,i=0;
       8. char chemin[200];
       9. char repertoire[15]="D:\\dossier";
      10.    DIR *rep= NULL;
      11. struct dirent *fichierLu= NULL;
      12. ......
      13. .......
      14.
      15. foot = fopen("foot.txt", "r" );
      16.   if (NULL == foot)
      17.   {
      18.  printf("Impossible d'ouvrir le fichier de classe foot\n" );
      19.  return 1;
      20.   }
      21. fseek (foot, 0 , SEEK_END);  // Obtient la taille du fichier
      22. lsize = ftell (foot);
      23. rewind (foot);
      24.
      25. ch1 = (char*) malloc (lsize * sizeof(char));
      26. carac = fgetc(foot);
      27. while (carac != EOF)
      28.  {
      29.    while ( carac != ' ' && carac != '\n' && carac !=EOF ) // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
      30.     {
      31.      ch1[i]= carac;
      32.      i++;
      33.      carac = fgetc(foot);
      34.     }
      35.    ch1[i]=' ';
      36.   carac = fgetc(foot);
      37.   i++;
      38.  }
      39.   longueur1=strlen(ch1);
      40.   i=0;carac=0; lsize =0;
      41.   fclose (foot);
      42. ..
      43. ....
      44. ....
      45.
      46. rep =opendir(repertoire);
      47.   if (rep==NULL)
      48.   printf("erreur" );
      49.   fichierLu = readdir(rep);
      50. while( fichierLu!=NULL)
      51. {
      52.   if (strcmp(fichierLu->d_name, "." ) != 0 && strcmp(fichierLu->d_name, ".." ) != 0)
      53. {
      54.   sprintf(chemin, "%s\\%s", repertoire, fichierLu->d_name);
      55.   fichier = fopen(chemin,"r" );
      56.
      57.   if (NULL == fichier)
      58.   {
      59.  printf("Impossible d'ouvrir le fichier %s\n",fichierLu->d_name);
      60.  return 1;
      61.   }
      62.   fseek (fichier, 0 , SEEK_END);  // Obtient la taille du fichier
      63. lsize = ftell (fichier);
      64. rewind (fichier);
      65.
      66. chaine = (char*) malloc (lsize * sizeof(char));
      67. carac = fgetc(fichier);
      68. while (carac != EOF)
      69.  {
      70.    while ( carac != ' ' && carac != '\n' && carac !=EOF ) // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
      71.     {
      72.      chaine[i]= carac;
      73.      i++;
      74.      carac = fgetc(fichier);
      75.     }
      76.    chaine[i]=' ';
      77.   carac = fgetc(fichier);
      78.   i++;
      79.  }
      80.    longueur=strlen(chaine);;
      81.  
      82.
      83. //appel de la fonction
      84. nb_foot=compter_mot_identique(chaine,ch1,longueur,longueur1);
      85.
      86. fclose (fichier);
      87.   free(chaine);
      88. }
      89. fichierLu = readdir(rep);
      90. }
      91. free(ch1);
      92. if (closedir(rep)==-1)
      93. {
      94. printf("echec" );
      95. }
      96.
      97. return(0);
      98.
      99. }

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    tu as suivi le cours "pourquoi faire simple alors qu'on peut faire compliqué" ???


Discussions similaires

  1. requête where entre deux chaines de caractères
    Par soltani1 dans le forum Développement
    Réponses: 2
    Dernier message: 04/10/2007, 09h34
  2. Détecter les lignes identiques entre deux matrices
    Par totovich dans le forum MATLAB
    Réponses: 5
    Dernier message: 17/04/2007, 09h42
  3. Compter pixels différents entre deux images
    Par hiccup dans le forum OpenGL
    Réponses: 5
    Dernier message: 13/03/2007, 14h26
  4. espace entre deux chaines de caractères
    Par Pitou5464 dans le forum Access
    Réponses: 2
    Dernier message: 09/08/2006, 12h16
  5. Réponses: 7
    Dernier message: 03/02/2006, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo