Problème en C pour une fonction sur un texte

Résolu/Fermé
jutabary Messages postés 15 Date d'inscription lundi 23 juin 2008 Statut Membre Dernière intervention 1 octobre 2011 - 23 juin 2011 à 02:55
jutabary Messages postés 15 Date d'inscription lundi 23 juin 2008 Statut Membre Dernière intervention 1 octobre 2011 - 23 juin 2011 à 18:15
Bonjour,

Je dois rendre un projet en langage C ou je dois trouver tous les anagrammes entre deux textes différents.

J'ai réaliser une bonne partie du programme sur un seul texte, c'est alors que je me suis aperçu que ma fonction servant à mettre le texte en minuscule et à enlever la ponctuation
ne marchait que sur un des deux textes :

voici mon code :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

char sansPonctuationEtMajuscule(char caractere);

int main(int argc, char * argv[])
{

FILE* fichier1 = NULL;


typedef struct
{
char mot[30];

}stockage;

stockage tableau1[1500];
stockage tableau2[9000];

char caractere = 0;

int i;
int j;

fichier1 = fopen("text1.txt", "r+");

if (fichier1 != NULL)
{
caractere = fgetc(fichier1);

for(i = 0; caractere != EOF; i++)
{
while (!isalpha(caractere)) caractere = fgetc(fichier1) ;
fseek (fichier1, -1, SEEK_CUR) ;
for(j = 0; caractere != ' ' && caractere != EOF ; j++)
{

caractere = sansPonctuationEtMajuscule(caractere = fgetc(fichier1)); //Texte en minuscule, on déplace le cursseur au caractére suivant.

tableau1[i].mot[j] = caractere; //On extrait les mots du fichier1 dans le tableau.

printf("%c",caractere) ;
}
tableau1[i].mot[j+1] = '\0' ;
caractere = fgetc (fichier1) ;
}
fclose(fichier1);
}
printf ("\n\n%s", tableau1[45].mot) ;

printf("\n");

system("Pause");
return 0;
}

char sansPonctuationEtMajuscule (char caractere)
{
if ( caractere >= 'A' && caractere <= 'Z') //Permer de passer des majuscule en minuscule.
{
caractere = caractere+32;
}

if (!isalpha(caractere)) //Enleve la ponctuation.
{
caractere = ' ';
}
return caractere;
}

Fin du code
Ce code marche un des 2 fichiers textes , pourriez résoudre mon problème,
Merci d'avance :)


A voir également:

3 réponses

lucas06150 Messages postés 151 Date d'inscription jeudi 17 décembre 2009 Statut Membre Dernière intervention 19 juillet 2012 11
23 juin 2011 à 14:46
Mais où est ton deuxième fichier ??
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
23 juin 2011 à 15:55
difficile de savoir comme ça. Il faudrait en dire plus : qu'est-ce qui se passe exactement avec le deuxième fichier ? à quoi il ressemble ?
les erreurs ?
0
jutabary Messages postés 15 Date d'inscription lundi 23 juin 2008 Statut Membre Dernière intervention 1 octobre 2011
23 juin 2011 à 18:15
alors pour le deuxième fichier c'était tout simplement remplacer text1. par text2.txt.
J'ai un peu avancer depuis j'arrive à lire mes deux fichiers mais je n'arrive pas à faire un trix sur mes mots. j'aimerais dans un premier temps les trier lettres par lettres (chien : cehin)puis mot par mot:
J'ai vu en cours les différents trix mais je n'arrive pas à les appliquer à mes textes.
J'utilise code blocks.

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

typedef struct
{
char mot[26];
}stockage;

stockage tab1[1500];
stockage tab2[15000];
stockage tabbis1[1500];
stockage tabbis2[15000];

void lectureFichier(char saisieFichier[], stockage tableau[]); //prototype
char extractnettoyage(FILE *fichier, stockage tableau[]); //prototype
void affichertable(int t[],int taille); //prototype
void triinsertion (char t[],int MAX);//prototype

//=========================DEBUT DU MAIN================================================================================================

int main()
{
char saisiefichier1[10];
char saisiefichier2[10];

//=======================Affichage du programme===================================
printf("\n\nModule de B23: Tabary Julien\n");
printf("Ce programme recherche les anagrammes entre deux textes.\n\n");

printf("Rentrer un texte numero 1 pour lancer la lecture: ");
scanf("%s", saisiefichier1);//saisi du text1.txt



printf("Rentrer un texte numero 2 pour lancer la lecture: ");
scanf("%s", saisiefichier2);//saisi du text2.txt

//=============================Lecture des textes===================================
int i=0;
int j=0;
int cpt=0;

lectureFichier(saisiefichier1, tab1); //On utilise la fonction lectureFichier pour lire le text1.txt, lafonction lecturefichier va elle utiliser la fonction extractnettoyage
lectureFichier(saisiefichier2, tab2); //On utilise la fonction lectureFichier pour lire le text2.txt, lafonction lecturefichier va elle utiliser la fonction extractnettoyage

printf("\n\nVerification de l'extraction :");
printf("\n%s\n", tab1[1].mot); //verification de l'extraction dans un tableau pour le text1.txt
printf("%s\n", tab2[1].mot); //verification de l'extraction dans un tableau pour le text2.txt

memcpy(tabbis1, tab1, sizeof tabbis1);//Copie le tableau 1 original
memcpy(tabbis2, tab2, sizeof tabbis2);//Copie le tableau 1 original

printf("\n\nVerification de la copie du tableau :");
printf("\n%s\n", tabbis1[1].mot); //verification de l'extraction dans un tableau pour le text1.txt
printf("%s\n", tabbis2[1].mot); //verification de l'extraction dans un tableau pour le text2.txt


//===============================trix=========================================

printf("\n%s\n", tabbis1[1].mot);

return 0;
}

//==============================FIN DU MAIN==============================================================================================






//==============================DEFINITION DE FONCTION===================================================================================

//Fonction lisant le fichier.

void lectureFichier(char saisieFichier[], stockage tableau[])
{
FILE* fichier = NULL;
fichier = fopen(saisieFichier, "r+");//r+ permet l'écriture
if (fichier != NULL)
{
printf("\nLecture reussie.");
extractnettoyage(fichier, tableau); //Extraction des deux textes dans tab1 et tab2.
fclose(fichier);
}
else
{
printf("Impossible d'ouvrir le fichier."); //message d'erreur
}

}

//Procédure permettant extraire les mots dans une structure et d'enlever la ponctuation et les majuscules.

char extractnettoyage(FILE *fichier, stockage tableau[])
{
char caractere;
int i = 0;
int j;
caractere = fgetc(fichier);
while(caractere != EOF)
{
j = 0;

while(caractere != ' ' && caractere != EOF)
{
if ( caractere >= 'A' && caractere <= 'Z') //Utilisation du code ASCII +32 entre 'A' et 'a'.
{
caractere += 32;
}
else if (!isalpha(caractere)) //supprime ce qui n'est pas un mot
{
caractere = ' ';
}
tableau[i].mot[j] = caractere; //On extrait les mots du fichier dans le tableau.
caractere = fgetc(fichier);
j++;
}
tableau[i].mot[j] = '\0';
caractere = fgetc(fichier);
i++;
}
return tableau;
}

// Fonction Affichage de tableau

void affichertable(int t[],int taille)
{
int i;
for (i=0;i<taille;i++)
printf("%d ",t[i]);
printf("\n");
}

//===========================Fonction Trix=======================================


//TRI SHELL
/*
void trishell(stockage tab[])
{
int h=1;
do
{
h=3*h+1;
}
while(h<N);
do
{
int i;
h=h/3;
for(i=h;i<N;i++)
{
int aux;
aux=tab[0].mot[i];
int j;
j=i;
while(j>=h && tab[0].mot[j-h]>aux)
{
tab[0][j]=tab[0].mot[j-h];
j=j-h;
}
tab[0].mot[j]=aux;
}
}
while ( h!= 0);
}
*/
//FONCTION TRI SELCTION

void triinsertion (char t[],int MAX){

int i,j,min,aux;
for(i=0;i<MAX;i++)
{
aux=t[i];
j=i;
while(j>0 && t[j-1]>aux)
{
t[j]=t[j-1];
j=j-1;
}
t[j]=aux;
}
}
0