rechercher une chaîne de caractères dans un fichier en C++

En langage C une chaîne de caractère est mémorisée dans un tableau de caractères de type char, le type char peut stocker une lettre (on a bien dit qu'une seule lettre et pas plus). Il peut aussi stocker des nombres compris entre -128 et 127.
Comme l'ordinateur ne comprend que les nombres, les lettres sont transformées en nombres. Donc chaque caractère est associé à un nombre. Le langage C fait ce traitement très rapidement. par exemple:

Le caractère 'a' correspond dans le code ASCII au nombre 97. Pour vérifier tapez alt+97.

    char lettre = ' a ' ;
    printf("%c\n", lettre);

Une chaîne est un tableau de type char:
    char chaine[]="je suis un programmeur";

Notre objectif est de lire à partir d'un fichier texte et rechercher si une chaîne de caractères est dans ce fichier. On a un fichier dans le répertoire "C:/test.txt", ce fichier contient du texte par exemple une phrase simple :je m'appelle X et je suis un programmeur.

En C, char chaine[] est représentée sous la forme suivante:


j
e
s
u
i
s
u
n
p
r
o
g
r
a
m
m
e
u
r
‘\0’

' \0 ' indique la fin du tableau.


#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;

void rechercherDansFichier(char chaine[])
{
 ifstream monFlux("C:/test.txt");
 if(monFlux)
 {
 int i=0,position=0;
 //La lecture se fait par caractère 
 monFlux.clear();
 //initialiser la tete de lecture de 0
 //ios::beg : commencer de début
 monFlux.seekg(0, ios::beg);
 char c;
 //tant que ce n'est pas la fin de fichier
 while(monFlux.get(c))
 {
 //incrémenter la position de la tete de lecture
 position++;
 //si le caractère correspond au caractère de la 
 //chaine recherchée dans la position i
 //alors passer au caractère suivant
 if(c==chaine[i]){
 i++;
 //si toutes les caractères de la chaine sont
 //vérifiés alors on a trouvé la chaine dans
 //le fichier
 if(i==strlen(chaine)) //strlen : retourne la longueur de la chaine
 printf("La chaine recherchée est dans la position : %d "
 "et termine à la position %d\n", position-strlen(chaine),position);
 }
 //sinon si on trouve un seul caractère
 //qui ne correspond pas alors
 //redémarer de 0
 else
 i=0;
 }
 }
 else
 printf("Impossible d'ouvrir le fichier\n");
}

int main()
{
 char chaine[]="un programmeur";
 rechercherDansFichier(chaine);
 system("pause");
}

Commentaires (0)

Connectez-vous pour commenter

Rejoignez la discussion et partagez vos connaissances avec la communauté

Chargement des commentaires...