Chaines de caractères ;

Fermé
Souheil.H - 29 juin 2016 à 05:40
 souheil.H - 29 juin 2016 à 08:44
Bonjour ,

Je viens vers vous aujourd'hui pour vous demander comment pourrais-je , à partir d'un fichier .txt ouvert en lecture/écriture determiner quel est la position de chaque mot :
Exemple : Je suis ici pour demander de l'aide donnerait :
Je / 1
Suis/2
Ici/3 ....

Voici mon code déjà pour la lecture/ecriture :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 4000


void fusionne(char * tab1, char * tab2, int l)
{
int j=strlen(tab2);
int k=0;
int i;
if (j!=0)
{
tab2[j]='/';
tab2[j+1]='' ;
tab2[j+2]='\n';
for (i=j+3; i<j+3+l; i++)
{
tab2[i]=tab1[k];
k++;
}
}
else
{
for (i=j; i<j+l; i++)
{
tab2[i]=tab1[k];
k++;
}
}
}


int main()
{
char tab[max];
char tab_nouns[max], tab_verbe[max], tab_adj[max], tab_adv[max],tab_determinants[max], tab_non[max];
char mot[max];
int i=0;

FILE* fichier = NULL;
FILE * fichier_tag = NULL;
int caractereActuel = 0;


fichier_tag = fopen("fichier_tag.txt", "r");
if (fichier_tag != NULL)
{
printf("Input file opened \n\n ");
do
{
caractereActuel = fgetc(fichier_tag);
printf("%c", caractereActuel);
tab[i]=caractereActuel;
i++;

} while (caractereActuel != EOF);

fclose(fichier_tag);
}

int j=0;
for (i=0; i<strlen(tab); i++)
{
if (tab[i]=='_')
{
if ((tab[i+1]=='J') && (tab[i+2]=='J'))
{
fusionne(&mot,&tab_adj,j);
j=0;
i+=4;
}
else
if ((tab[i+1]=='N') && (tab[i+2]=='N'))
{
fusionne(&mot,&tab_nouns,j);
j=0;
i+=4;
}
else
if ((tab[i+1]=='V') && (tab[i+2]=='B'))
{
fusionne(&mot,&tab_verbe,j);
j=0;
i+=4;
}
else if ((tab[i+1]=='I') && (tab[i+2]=='N'))
{
fusionne(&mot,&tab_adv,j);
j=0;
i+=4;
}
else
if ((tab[i+1]=='D') && (tab[i+2]=='T'))
{
fusionne(&mot,&tab_determinants,j);
j=0;
i+=4;
}
else
{
fusionne(&mot,&tab_non,j);
j=0;
i+=4;
}
}
if (((tab[i]==',') && (tab[i+1]=='_')) || ((tab[i]=='.') && (tab[i+1]=='_')) )
{
i+=4;
mot[j]=tab[i];
}
else mot[j]=tab[i];
j++;

}
printf("\n\n");

fichier = fopen("output.txt", "w");

if (fichier != NULL)
{
printf("Output file is being proceed\n\n");

fputs("Nouns: \n", fichier);
for (i=0; i<strlen(tab_nouns); i++)
{
fputc(tab_nouns[i],fichier);
}
fputs("\n\n", fichier);
printf("...\n\n");

fputs("Verbs: \n", fichier);
for (i=0; i<strlen(tab_verbe); i++)
{
putc(tab_verbe[i], fichier);
}
fputs("\n\n", fichier);
printf("...\n\n");

fputs("Adverbs: \n", fichier);
for (i=0; i<strlen(tab_adv); i++)
{
putc(tab_adv[i],fichier);
}
fputs("\n\n", fichier);
printf("...\n\n");

fputs("Adjectifs: \n", fichier);
for (i=0; i<strlen(tab_adj); i++)
{
fputc(tab_adj[i],fichier);
}
fputs("\n\n", fichier);
printf("...\n\n");

fputs("Determinants: \n", fichier);
for (i=0; i<strlen(tab_adj); i++)
{
fputc(tab_determinants[i],fichier);
}
fputs("\n\n", fichier);
printf("...\n\n");

fputs("Unknown tags: \n", fichier);
for (i=0; i<strlen(tab_non); i++)
{
fputc(tab_non[i],fichier);
}
printf("Output file has correctly been made \n\n");

}

return 0;
}



Merci à vous pour votre aide ;

1 réponse

paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 25
29 juin 2016 à 08:31
J'ai beaucoup de mal à lire le code parce qu'il n'est pas entre des balises <code> :p

Pour déterminer la position d'un mot, il suffit d'incrémenter un compteur à chaque fois que l'on trouve un nouveau mot. Ainsi, à chaque fois que l'on trouve un nouveau mot, ce compteur sera égal à la position du mot en question, que tu peux afficher, enregistrer...
0
Merci , j'ai fais comme ceci et je pense que ça marche
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 4000

int nbre(int n)
{
return n%10;
}

int nbre1 (int n)
{
return n/10;
}

void fusionne(char * tab1, char * tab2, int l, int p)
{
int j=strlen(tab2);
int k=0;
int i;
if (j!=0)
{
tab2[j]='\n';
for (i=j+1; i<j+1+l; i++)
{
tab2[i]=tab1[k];
k++;
}
tab2[i]='/';
if (p<10) tab2[i+1]=p+'0';
else
{
tab2[i+1]=nbre1(p)+'0';
tab2[i+2]=nbre(p)+'0';
}


}
else
{
for (i=j; i<j+l; i++)
{
tab2[i]=tab1[k];
k++;
}
tab2[i]='/';
if (p<10) tab2[i+1]=p+'0';
else
{
tab2[i+1]=nbre1(p)+'0';
tab2[i+2]=nbre(p)+'0';
}
}
}

int main()
{
char tab[max];
char tab_nouns[max], tab_verbe[max], tab_adj[max], tab_adv[max], tab_non[max];
char mot[max];
int i;

FILE* fichier = NULL;
FILE * fichier_tag = NULL;
int caractereActuel = 0;

i=0;
int p=0;
fichier_tag = fopen("fichier_tag.txt", "r");
if (fichier_tag != NULL)
{
printf("The file has correctly been opened \n\n ");
do
{
caractereActuel = fgetc(fichier_tag);
printf("%c", caractereActuel);
tab[i]=caractereActuel;
i++;

} while (caractereActuel != EOF);

fclose(fichier_tag);
}

int j=0;
for (i=0; i<strlen(tab); i++)
{
if (tab[i]=='_')
{ p++;
if ((tab[i+1]=='J') && (tab[i+2]=='J'))
{
fusionne(&mot,&tab_adj,j,p);
j=0;
i+=4;
}
else
if ((tab[i+1]=='N') && (tab[i+2]=='N'))
{
fusionne(mot,tab_nouns,j,p);
j=0;
i+=4;
}
else
if ((tab[i+1]=='V') && (tab[i+2]=='B'))
{
fusionne(mot,tab_verbe,j,p);
j=0;
i+=4;
}
else if ((tab[i+1]=='I') && (tab[i+2]=='N'))
{
fusionne(mot,tab_adv,j,p);
j=0;
i+=4;
}

else
{
fusionne(mot,tab_non,j,p);
j=0;
i+=4;
}
}
if ((tab[i]==',') && (tab[i+1]=='_'))
{
i+=4;
mot[j]=tab[i];
}

if ((tab[i]=='.') && (tab[i+1]=='_') )
{
i+=4;
mot[j]=tab[i];
p=0;
}
else {mot[j]=tab[i];}
j++;


}
printf("\n\n");

fichier = fopen("output_file.txt", "w");

if (fichier != NULL)
{
printf("The output has been created \n\n");
fputs("Nouns: \n", fichier);
for (i=0; i<strlen(tab_nouns); i++)
{
fputc(tab_nouns[i],fichier);
}
fputs("\n\n", fichier);

fputs("Verbs: \n", fichier);

for (i=0; i<strlen(tab_verbe); i++)
{
putc(tab_verbe[i], fichier);
}

fputs("\n\n", fichier);

fputs("Adverbs: \n", fichier);
for (i=0; i<strlen(tab_adv); i++)
{
putc(tab_adv[i],fichier);
}
fputs("\n\n", fichier);

fputs("Adjectifs: \n", fichier);
for (i=0; i<strlen(tab_adj); i++)
{
fputc(tab_adj[i],fichier);
}

fputs("\n\n", fichier);

fputs("Unknown tags \n", fichier);
for (i=0; i<strlen(tab_non); i++)
{
fputc(tab_non[i],fichier);
}
fclose(fichier);
}

return 0;
}
0