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