begin process at 2012 05 27 18:04:22
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > RECHERCHE DE MOTIF DANS UN TEXTE

RECHERCHE DE MOTIF DANS UN TEXTE


 Information sur la source

 Description

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

  • /**********************/
  • /* 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();
  • }
/**********************/
/* 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.


 Sources du même auteur

Source avec Zip TRANSFERT DE FICHIER VIA LE PROTOCOL TCP/IP
Source avec Zip CHEMIN CRITIQUE PAR LA METHODE PERT
Source avec Zip TRANSFERT DE FICHIER VIA SOCKET UDP
SIMPLEX PRIMAL
Source avec Zip PROBLÈME DES 8 REINES GÉNÉRALISÉ

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

Commentaires et avis

Commentaire de magic_Nono le 31/01/2005 09:45:54

Bj

sans vouloir vexer, initié me semble un peu excecif pour la production d'une fonction C non générique
avec variable globales
écrite de maniere non optimisée.

la mm extraite d'une lib C++ produite ds ces pages:

int BString::getNbOccurence(const BString test)const
{
/// ------------------------------------------------------------------------------------
/// ---------------- BString::getNbOccurence(const BString test) -> 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)
/// ------------------------------------------------------------------------------------
/// -----  const BString test : la chaîne recherchée
/// ------------------------------------------------------------------------------------
/// -----  retour (int) : cf.obj
/// ------------------------------------------------------------------------------------
/// -----  Var Utilisées de la classe (2) : m_iTaille ,m_str
/// -----  Var Muettes (cf.partie préc) (1) : test
/// -----  Var Internes à la fonction (5) : i ,l ,nb ,plomp ,separateur
/// -----  Var Utilisées par adresse (2) : m_str ,test
/// -----  Var In  (3) : 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++;
}
return nb;
}

si tu produit des choses gnou, essaie des trucs un peux plus sioux

Allez, sans rancune
++

Nono.

Commentaire de Kirua le 31/01/2005 17:26:50

Si la phrase est:

"babababa"

et qu'on cherche

"baba"

est-ce qu'il retourne 2, ou 3 ?

Commentaire de magic_Nono le 01/02/2005 08:29:35

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

Commentaire de magic_Nono le 01/02/2005 08:38:50

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;

Commentaire de magic_Nono le 01/02/2005 08:58:01

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;
}

Commentaire de pipo20005 le 11/02/2005 23:47:19

bon debut, ne t'enfait pas

 Ajouter un commentaire




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 : 0,858 sec (3)

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