begin process at 2012 05 28 22:05:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

System

 > 

comparaison de chaine de caracteres


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

comparaison de chaine de caracteres

mardi 1 avril 2008 à 16:34:25 | comparaison de chaine de caracteres

romainbisson

Bonjour,

je voudrais comparer une chaine de caractere avec le caractere \n, si ils sont identitiques cela m'incremente un nombre.

    char c;
    char l ='\n';  
    char nf[101];
    FILE * f;

    while((f = fopen(nf, "r")) == NULL){
    printf("\n Veuillez rentrer un nom de fichier correct avec l'extension .txt !\n");        
    printf("\n Nom du fichier : ");
    scanf("%100s", nf);
    }
   
    system("CLS");
   
     while(fgetc(f)!=EOF){
     if((!strcmp(c, l))){
                printf("youpi");
                }
                ++c;
}
}

mais sa ne marche pas correctement, j'ai besoin d'aide....

mardi 1 avril 2008 à 17:08:46 | Re : comparaison de chaine de caracteres

laurent1024

Membre Club
Bonjour.

essaye plutot
int n = 0;
do {
c = fgetc (f);
if (c == '\n') n++;
} while (c != EOF);

Cdt

mardi 1 avril 2008 à 17:14:40 | Re : comparaison de chaine de caracteres

jfrancois

Bonjour,

Si c'est pour compter un caractère particulier comme '\n' dans le fichier (l'explication est pas très claire !) voilà ce que ça peut donner :

#include <stdio.h>
void main()
{
   char car;
   char l = '\n'; 
   char nf[MAX_PATH];
   int  compteur;
   FILE *f;

   while(true)
   {
      printf("\n Veuillez rentrer un nom de fichier correct avec l'extension .txt !\n");        
      printf("\n Nom du fichier : ");
      scanf("%s",nf);
      f = fopen(nf,"r");
      if (f) break; // OK
      printf("\n *** ERREUR A L'OUVERTURE DU FICHIER ***\n");
   }
   
   system("CLS");
   compteur = 0;
   while ((car = fgetc(f)) != EOF)
   {
      if (car == l)
      {
         ++compteur;
         printf("Youpi\n");
      }
   }
   fclose(f);
   printf("compteur = %d\n",compteur);
}

Jean-François

mardi 1 avril 2008 à 18:56:49 | Re : comparaison de chaine de caracteres

romainbisson

merci Jean-François, c'est cool.


j'ai un deuxieme probleme,

je voudrai créer des fgets

en faisant

fgets(test, 10000, f);

mais c'est fgets doivent utiliser le code que tu as fait plus haut,

   while ((car = fgetc(f)) != EOF)
   {
      if (car == l)
      {
         ++compteur;

a chaque implementation de i, il creer un nouveau fgets.

en ensuite je souhaite les afficher du dernier au premier ces fgets




mardi 1 avril 2008 à 19:08:58 | Re : comparaison de chaine de caracteres

jfrancois

fgets() va lire le fichier ligne par ligne (fgets = f get s = file get string) y compris le saut de ligne final.

a chaque implementation de i, il creer un nouveau fgets.
en ensuite je souhaite les afficher du dernier au premier ces fgets


Là je ne comprends plus ! un petit exemple serait le bienvenu.

Jean-François

mardi 1 avril 2008 à 19:25:48 | Re : comparaison de chaine de caracteres

romainbisson

avec le programme au dessous, on a recupere le nombre de ligne du fichier, on sait maintenant combien de fgets a creer, il faudrai que je cree une boucle qui cree autant de fgets que de nombre de ligne.


un truc comme sa,


for(i=0 ; i<nbre_de_ligne ; i++){

fgets(test[i] , 10000, f);

}

 et ensuite, je souhaite pouvoir afficher ses lignes, encore avec une bouvle de la derniere a la premier  ligne

c'est plus comprehensible
mardi 1 avril 2008 à 20:24:42 | Re : comparaison de chaine de caracteres

jfrancois

Voilà un exemple de lecture à l'envers d'un fichier texte en passant par un tableau dans lequel on mémorise l'adresse de chaque ligne dans le fichier lors d'une première lecture du fichier. Puis, lors de la seconde lecture du fichier, on se positionne sur le début de chaque ligne pour la lire mais en commençant par la dernière ligne et en remontant vers la première ligne.

#include <stdio.h>
#include <time.h>
void main()
{
   char nom_fichier[MAX_PATH];
   char buffer[1000];
   long adresse[10000];
   int  compteur;
   FILE *pf;

   // --- Saisir/ouvrir le fichier
   while(true)
   {
      printf("\nVeuillez saisir un nom de fichier correct avec l'extension .txt !\n");        
      printf("\nNom du fichier : ");
      scanf("%s",nom_fichier);
      pf = fopen(nom_fichier,"r");
      if (pf) break;
      printf("\n*** ERREUR A L'OUVERTURE DU FICHIER ***\n");
   }
   
   // --- Remplir le tableau des adresses de début de ligne dans le fichier
   compteur = 0;
   adresse[compteur++] = 0; // 1ère ligne
   while (fgets(buffer,sizeof(buffer),pf))
      adresse[compteur++] = ftell(pf);
   --compteur; // supprimer la dernière ligne = EOF

   // --- Parcourir le fichier de la fin vers le début
   printf("compteur = %d\n",compteur);
   for (int i=compteur-1 ; i>=0 ; --i)
   {
      fseek(pf,adresse[i],SEEK_SET);   // positionnement
      fgets(buffer,sizeof(buffer),pf); // lecture
      printf("%03d : %s",i,buffer);    // visu
   }

   // --- Fermer le fichier
   fclose(pf);
}

Jean-François

mardi 1 avril 2008 à 20:30:23 | Re : comparaison de chaine de caracteres

romainbisson

merci c'est vraiment sympa
mardi 1 avril 2008 à 20:35:32 | Re : comparaison de chaine de caracteres

jfrancois

Pas de quoi ! Il faudrait veiller à ne pas saturer le tableau des adresses !

Jean-François

mardi 1 avril 2008 à 22:31:08 | Re : comparaison de chaine de caracteres

SAKingdom

Membre Club
On pourrait pas à la place lire par gros bloc (plusieur ko en utilisant fread) puis parcourir ce buffer ?
Exemple:

char tab[1024];
int i, count = 1;

while((i = fread(tab, 1, sizeof(tab)-1, f))) {
    char *c = tab;
    *(c+i) = 0;

    do
         if(*c++ == '\n') count++;
    while(*c);
}

Ce serait, dans tout les cas, bien plus rapide qu'une lecture "ligne par ligne" ou pire : "caractère par caractère".

C++ (@++)


1 2

Cette discussion est classée dans : chaine, printf, comparaison, char, nf


Répondre à ce message

Sujets en rapport avec ce message

comparaison qui ne s'effectue pas [ par chris5874 ] Bonjour,je cherche a faire une comparaison entre un mot entre avec le clavier et des enregistrements dans un fichier. Malheureusement, malgre tous mes demande d'aide (Gestion des fichiers et structures en C) [ par medsky ] Bonjour, Afin de manipuler les fichiers et les structures en C, On m'a demandé de réalisé une application qui cree un fichier pour saisir les inform Recuperer des valeurs aprés un scanf [ par andoid ] Bonjour j'ai un probléme avec mon tableau de char: je m'explique, j'ai char chaine[]; scanf("%s"chaine); si l'utilisateur met en ligne de commande Chaine de caractères oubliée [ par Venusos ] Hello les gens =) Ma prof de dev m'ayant donné comme devoir de grosbill pour les vacances (ouais parce-qu'elle veut quand-même un peu me tester vu qu RS232 ou RS485 dial entre 2 pics [ par Pat2903 ] Bonjour je suis en projet pour crée un dialogue RS485 entre deux pics. Mon souci c'est que j'utilise MPLAB et le Compilateur C18. j'utilise la library problème avec programme pour l'école [ par arne219 ] bonjour. J'ai bientôt un examen de langage c (examen de rattrapage) Pour m'exercer je refais un programme que j'ai du faire a l'examen de juin. le pro passer un tableau de chaines à 2 dimention comme argument d'une fonction [ par boujerra ] bonjour à tous mon probleme est le suivant je veux passer en parametre d'une fonction un tableau à 2 dimention au cour de la fonction main tout se pas Probleme Erreur de segmentation [ par sivas58 ] [color=red]Bonjour a tous; J'ai besoins d'aide sur une erreur de segmentation.[/color] [code=cpp]int decoupeLignePipe(char *chaine,char **commande1, Erreurs C2065 et C2143 [ par thomas71 ] Bonjour, J'ai un petit problème avec le bout de code ci-dessous. Je travaille sous Visual Studio 2010. Deux erreur apparaissent lors de la compilatio j'ai besoin l'aide pour correcte un code sur les arbre binaire de recherche (dictionaire) [ par momoinfo92 ] l'annonce de l'exercice est: créer un dictionaire français-anglais utilisé l'arbre binaire de recherche basée sur l'ordre alphabétique des mots chaq


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,295 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales