Problème en C pour une fonction sur un texte
Résolu
jutabary
Messages postés
15
Date d'inscription
Statut
Membre
Dernière intervention
-
jutabary Messages postés 15 Date d'inscription Statut Membre Dernière intervention -
jutabary Messages postés 15 Date d'inscription Statut Membre Dernière intervention -
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 :)
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:
- Problème en C pour une fonction sur un texte
- Fonction si et - Guide
- Texte de chanson gratuit pdf - Télécharger - Vie quotidienne
- Transcription audio en texte word gratuit - Guide
- Mettre un texte en majuscule - Guide
- Excel cellule couleur si condition texte - Guide
3 réponses
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 ?
les erreurs ?
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;
}
}
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;
}
}