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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
| #include <stdio.h>
#include <stdlib.h>
#define N 256
int nombre_occurence(char*,char*,int*);
void minuscule_en_majuscule(char*);
int copie( char*,char*);
int verif_ponctuation(char*,int);
int position_car(char*,char,int);
int main(int argc, char *argv[])
{
char phrase1[N];
char copiephrase[N]; /* vecteur de travail contenant une copie de la phrase */
char mot_trouver[N];
char copiemot[N]; /* vecteur de travail contenant une copie du mot a chercher */
int occurence=0;
printf("Entrer votre phrase: "); /* L'utilisateur entre une phrase */
gets(phrase1);
printf("Mot recherche: "); /* L'utilisateur entre un mot */
gets(mot_trouver);
int ent_phrase,ent_mot; /* entiers contenant la longueur de la phrase , celle du mot et le nombre d'occurences */
ent_phrase= copie(phrase1,copiephrase); /* copier la chaine dans un vecteur de travail et compter le nombre de lettres */
ent_mot = copie(mot_trouver,copiemot); /* copier le mot a chercher dans un vecteur */
if (occurence>1)
{
printf ("%d mots trouves dans la phrase\n",occurence);
}
else
{
printf ("%d mot trouve dans la phrase\n",occurence);
}
occurence = nombre_occurence(copiephrase, copiemot, &ent_mot); /* comptage du nombre d'occurences. */
system("PAUSE");
return 0;
}
int copie( char *quoi, char *tmpquoi)
{
int i; // variable de comptage
int n = N;
for (i=0; i<n && quoi[i];i++)
{ // tant qu'on est pas en fin de chaine ou sur le caractere \0
*(tmpquoi+i) = *(quoi+i); // copie du caractere dans le vecteur de travail
}
return i;
}
void minuscule_en_majuscule( char *maj)
{
int i = 0;
while ( *(maj+i) != 0 )
{
if ( *(maj+i) >= 97 && * (maj+i) <= 122)
{
*(maj+i) -= 32 ;
}
/* Pour passer d'un caractère en minuscule à un caractère en majuscule, on voi que dans la table ascii on a un décalage de 32 */
i+= 1;
}
}
int nombre_occurence( char *phrase, char *mot, int *longueurmot)
{
// printf("longueur du mot à chercher : %d ", *longueurmot); //affichage du nombre de caractères dans le mot à chercher
int i = 0, compte = 0, indice = 0, debutmot = 1, boucle = 1;
while (boucle == 1)
{ // tant qu'on est pas en fin de chaine
indice = 0; // on considère qu'on compare le premier caractère du mot
debutmot = 1; // on considère que le début de la chaine dans la phrase correspond au début du mot chercher
if (*(phrase+i ) == 0)
{ // on est en fin de phrase
boucle = 0; // on arrête de boucler
debutmot = 0; // on ne peut pas avoir de mot commençant en fin de phrase
}
while ( *(phrase+i) == 32 && *(phrase+i) != 0)
{
i++; // on passe tous les blancs en tête de phrase
}
while ( *(phrase+i) != 32 && *(phrase+i) != 0)
{ // tant qu'on ne change pas de mot dans la phrase et qu'on est pas en fin de chaine
// printf("%c",*(phrase+i) ); // affichage du caractère examiné [ peut être mis en commentaire ]
if ( *(phrase+i) != * (mot+indice) || indice > *longueurmot )
{ // si on a une discordance de caractère ou qu'on est sur un mot trop long
debutmot = 0; // on ne peut plus avoir de correspondance
}
i += 1; // on passe au caractère suivant dans la phrase
indice += 1; // on examinera le caractère suivant dans le mot
}
if ( *(phrase+i) == 0 && *(mot+indice) != 0)
{
debutmot = 0;
}
while ( *(phrase+i) == 32 )
{ // Plusieurs espaces consécutifs
i += 1; // on passe au caractère suivant dans la phrase, inutile de boucler
// sur un espace ou une fin de chaine
}
if (debutmot == 1)
{
compte += 1;
/* si on a toujours une concordance, cela signifie qu'on a une correspondance entre le mot examiné et le mot cherché
donc on augmente le compteur d'occurences*/
}
}
// les comptages sont faits, on peut afficher le nombre de mots trouvés ou, avantageusement, renvoyer la valeur.
// printf("\n On a trouvé le mot %d fois \n",compte);
return compte;
}
int verif_ponctuation(char*chaine,int position)
{
if (position<0) return 1; /*Vérification debut de chaine*/
switch (*(chaine+position))
{
case '\0': return 1; break; /*Vérification fin de chaine */
case ',': return 1; break; /*Vérification ponctuation et autres caractères */
case ';': return 1; break;
case ':': return 1; break;
case '!': return 1; break;
case '?': return 1; break;
case '(': return 1; break;
case ')': return 1; break;
case '.': return 1; break;
case ' ': return 1; break;
}
//le caractère ne correspond pas à de la ponctuation, la fin ou le debut de la chaine
return 0;
}
int position_car(char*chaine,char car,int i)
{
//On parcours la chaine jusque la fin pour trouver le caractère recherché, si trouvé on retourne la position
while (*(chaine+i)!='\0')
{
//Caractère trouvé, on retourne la position actuelle
if (*(chaine+i)==car) return i;
//Sinon on passe à la position suivante
i++;
}
//Caractère non trouvé
return -1;
} |
Partager