Recherche de motif dans un texte

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 885 fois - Téléchargée 35 fois

Contenu du snippet

C'est programme simple pour rechercher un mot dans une phrase.
Il n'est pas optimisé.
Ca complexité temporelle moyenne est en 0(n*m) ou n est la longueur de la phrase et m est la longueur du mot.

Source / Exemple :


/**********************/
/* El Antri Abdellah  */
/* 26 janvier 2005    */
/* Sous liscence GNU  */
/**********************/

#include<stdio.h>
#include<conio.h>
#include<string.h>

char text[200],motif[200];
long long_text,long_motif,i,j,k,nbr_occurence;
int trouver;

void main()
{
clrscr();
k = 0;
nbr_occurence = 0;
printf("\n\r Tapper une text sans espace:");
scanf("%s",text);
printf("\n\r Tapper un mot:");
scanf("%s",motif);
long_text = strlen(text);
long_motif = strlen(motif);

while(k <= long_text - long_motif )
     {
     trouver = 0;
     j = k;
     i = 0;
     while (text[j] == motif[i] && !trouver)
	   if(i == long_motif - 1)
	     {
	     trouver = 1;
	     nbr_occurence = nbr_occurence + 1;
	     i = 0;
	     }
	     else
		 {
		  i = i + 1;
		  j = j + 1;
		 }
     k = k + 1;
     }
printf(" Le nombre d'occurence de %s dans %s est: %ld",motif,text,nbr_occurence);
getch();
}

Conclusion :


Il existe deux boucle dans le programme, une pour parcourire le texte el l'autre pour le parcour du mot.

A voir également

Ajouter un commentaire Commentaires
merci pour votre publication
Messages postés
6
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
20 juillet 2005

bon debut, ne t'enfait pas
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
i+=l-1 plutot

dc ce qui donne



int BString::getNbOccurence(const BString& test,const bool distinct)const
{
/// ----------------------------------------------------------------------------------------------------------
/// ---------------- BString::getNbOccurence(const BString& test ,const bool distinct) -> int ----------------
/// ----------------------------------------------------------------------------------------------------------
/// ----- Objectif : compte le nombre d'occurence d'une chaîne dans celle de la classe
/// ----- Auteur(s) : Magic_Nono 28/08/03
/// ----- PreCond : test.getLenght>0
/// ----- PostCond : /
/// ----- Etat : 2 (-1<0<1<2)
/// ----- MaJ 05/07/04 : accélération
/// ----- MaJ 01/02/05 : distinct - Magic_Nono sur suggestion de Kirua
/// ----------------------------------------------------------------------------------------------------------
/// ----- const BString& test : la chaîne recherchée
/// ----- const bool distinct(par défaut : 'false') : compter uniquement les éléments distincts
/// ----------------------------------------------------------------------------------------------------------
/// ----- retour (int) : cf.objectif
/// ----------------------------------------------------------------------------------------------------------
/// ----- Var Utilisées de la classe (2) : m_iTaille ,m_str
/// ----- Var Muettes (cf.partie préc) (2) : distinct ,test
/// ----- Var Internes à la fonction (5) : i ,l ,nb ,plomp ,separateur
/// ----- Var Utilisées par adresse (2) : m_str ,test
/// ----- Var In (4) : distinct ,m_iTaille ,m_str ,test
if(test.m_iTaille>m_iTaille)
return 0;
if(test.m_iTaille==1)
{
char separateur;
separateur=test.m_str[0];
size_t i;
int nb=0;
for(i=0;i<getLength();i++)
if(m_str[i]==separateur)
nb++;
return nb;
}
size_t i,l=test.m_iTaille;
int nb=0;
BString plomp;
for(i=0;i<(m_iTaille-l+1);i++)
{
plomp=deA(i,i+l-1);
if(plomp==test)
{
nb++;
if(distinct)
i+=l-1;
}
}
return nb;
}
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
a , pr ma fonction, ben il retourne 3


attd...

confirmé

si on ve qu'il retourne 2,
il faut faire:
avec le dernier nb++
: i+=test.m_iTaille-2;
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
il a l'air d'avancer comme le montre les

i = i + 1;
j = j + 1;
}
k = k + 1;

de son prog

i++;
j++;
k++;

a propos,
point de vu optimisation, la derniere écriture est largement préférable

++
B
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.