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
| // Fichiers d'en-tête //
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fstream>
#include <iostream>
// Définition du flux d'entrées-sorties utilisé pour le fichier sur lequel on travaille //
fstream stream("C:\\Documents and Settings\FERRAOUN\Mes documents\Informatique\Python\indexe-moi.txt", ios::in|ios::out);
// Définition des variables utilisées //
char quit;
int pos=0;
char donnees[256][500];
int recurmot[1000];
// Cette fonction sert à déterminer la position prise par une chaîne de //
// caractère donné dans un fichier quelconque, chaque fois que celle-ci apparaît. //
bool verif( const char* mot) {
int ligne=0, rep=0;
bool etat=false;
// Les instructions présentes dans la boucle ci-dessous se réalisent tant que //
// le premier caractère de la ligne du fichier n'est pas nul //
while (donnees[0][ligne]!=NULL) {
int indice=0;
// Idem mais pour le dernier caractère d'une ligne quelconque //
while (donnees[indice][ligne]!=NULL) {
int compte= 0; int taille=0;
// Mise en place d'un compteur : la boucle fonctionne tant que le nombre //
// total de caractères inclus dans la chaîne de caractères définie auparavant //
// n'est pas atteint //
while(compte!=strlen(mot)) {
// Eviter les erreurs dues à la présence du caractère nul //
if (donnees[indice+compte][ligne]!=NULL) {
// Si les caractères du fichier et de la chaîne recherchée sont identiques //
if (donnees[indice+compte][ligne]==mot[compte]) taille++;
}
compte++;
}
// Si la chaîne de caractères recherchée est trouvée dans le fichier : //
// - Renvoyer la valeur "true" //
// - Enregistrer les différentes positions de la chaîne de caractères //
if (taille==strlen(mot)) {
etat=true;
recurmot[rep++]=ligne;
recurmot[rep++]=indice;
}
indice++;
}
ligne++;
}
return etat;
}
// Fonction "main" -> Fonction principale //
int main(void) {
int k=0;
bool test;
// Tant que la fonction get() ne retourne pas l'élément EOF (End Of File) // //
while (stream.get()!=EOF) {
// Changer la position du pointeur sur le flux d'entrée-sortie du fichier //
stream.seekg(pos);
char *lecture = new char[256];
// Mettre les caractères de la ligne lue dans la chaîne de caractères "lecture" //
// Délimitation par défaut de la fonction getline() : le caractère '\n' //
stream.getline(lecture, 256);
int i=0;
// Remplir la double matrice de caractères "données" avec sa consoeur "lecture" //
while(lecture[i]!=NULL) {
donnees[i][k]=lecture[i];
i++; pos++;
}
// Affecter le caractère '\n' à la fin de "données" //
donnees[i++][k]='\n';
k++; pos++;
// Vider la matrice "lecture" et libérer ainsi de l'espace en mémoire //
delete[] lecture;
}
// Afficher "donnees" à l'écran //
k=0;
while(donnees[0][k]!=NULL) {
int i=0;
while(donnees[i][k]!=NULL) {
cout<<donnees[i][k];
i++;
}
k++;
}
cout<<endl;
// Définir la chaîne de caractères recherchée //
const char* inter = "rep";
int nb = strlen(inter);
// Appel à la fonction "test" //
test = verif(inter);
if (test) cout<<"Les positions de la chaine de caracteres (x, y) dans le fichier sont : "<<endl;
for(int i=0; i<1000; i++) {
// Ne pas afficher de caractères nuls sinon risques d'erreurs //
if (!((recurmot[i]==NULL)&&(recurmot[i+1]==NULL))) {
cout<<recurmot[i]<<" ";
}
}
cout<<endl;
// Afficher la chaîne de caractères juste dessous sa position respective dans le fichier //
int xdonnees, ydonnees;
int i=0;
while(!((recurmot[i]==NULL)&&(recurmot[i+1]==NULL))) {
ydonnees = recurmot[i];
xdonnees = recurmot[i+1];
for(int j=0; j<nb; j++) {
cout<<donnees[xdonnees][ydonnees];
xdonnees++;
}
// Eliminer les chaînes de caractères trouvées de "données" //
while(donnees[xdonnees][ydonnees]!=NULL) {
donnees[xdonnees-nb][ydonnees] = donnees[xdonnees][ydonnees];
xdonnees++;
}
// Remplir le reliquat restant de "donnees" avec le caractère nul //
xdonnees-=nb;
for(int j=0; j<nb; j++) {
donnees[xdonnees][ydonnees]=NULL;
xdonnees++;
}
cout<<" ";
i+=2;
}
cout<<endl;
k=0;
// Afficher ensuite le résultat obtenu //
while(donnees[0][k]!=NULL) {
int i=0;
while(donnees[i][k]!=NULL) {
cout<<donnees[i][k];
i++;
}
k++;
}
cout<<endl;
// Quitter le programme en appuyant sur la touche 'q' //
while (quit!='q') cin>>quit;
stream.close();
} |