IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

tester chaine de caractere d'un tableau


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut tester chaine de caractere d'un tableau
    je cherche a tester l'existence d'un chaine de caractère
    de fichier dont un tableau déclarée mais le problème elle cesse de fonctionner ?? je pense le problème avec strcat(chaine,c)?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define TAILLE_MAX 1000
     
    typedef char tab[TAILLE_MAX][TAILLE_MAX];
                          /***fonction recherche qui permit de rechercher une chaine d'un tableau */
                recherche(char chaine,tab tab_ins,int tail_tab)
                { int i=0,n=0,j=0;
     
     
     
                for(i=0;i<tail_tab;i++)
                {
                if (strcmp(tab_ins[i],chaine)==0 )
                            {
     
     
                              n=0;
                              exit(n);
                            }
     
     
                        else if ((strcmp(tab_ins[i],chaine)!=0 )&&(tab_ins!=""))
                         j++;
                }
                if (j==tail_tab)
                n=-1;
                return n;
     
     
                }
     
                /*** programme principale qui permit de tester l'existence d'un chaine de caractere
                de fichier dont un tableau  */
    main()
    {
     
     
     
    int i=0,j=0,n=0;
    FILE*fichier=NULL;
    char chaine[50];// chaine extrait de fichier
    tab tab_ins={"kl","hh","hafedhg"};// exemple tab_ins pour tester
    int tail_tab=3;
    char c;
     
     
    fichier = fopen("test.txt","r");
     
    while((c=getc(fichier))!=EOF)
    {
        printf("%c",c);
     
     if ((c!= '\n')&&(c!='\t'))
     
        {
             strcat(chaine,c);
     
           }
           else
           { if (recherche(chaine,tab_ins,tail_tab)==-1)
     
           printf("erreur variable ' %s ' non déclare linge %d ",chaine,i);
            memset (chaine, 0, sizeof (chaine));
            // vidage  de la chaine
     
              }
     
    }
    fclose(fichier);
     
     
    return 0;
    }

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Vous devriez revoir les bases et faire les choses tranquillement.

    1) Indenter correctement votre code
    2) int main(void) et non main()
    3) Pensez à ceux qui vous lisent
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    strcat() concatène deux chaines de caractères, or dans ton code c est un caractère, pas une chaine de caractères.
    Une chaine de caractères est un tableau où sont stockés les caractères terminé par le caractère '\0'.

    Même remarque pour strcmp() et chaine.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Membre éclairé
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Points : 807
    Points
    807
    Par défaut
    Bonjour,

    Effectivement, tu te compliques la vie pour rien. Utiliser strcat pour ajouter un caractère à une chaîne de caractère, c'est assez bourrin. Il suffit simplement d'utiliser une variable supplémentaire, à partir de laquelle tu as deux choix : la notation indice contre la notation pointeur. En gros, soit tu utilises un pointeur temporaire que tu incrémentes à chaque itération, soit tu fais la même chose, mais en indexant le tableau original via un index entier.

    Au niveau de la stratégie globale, il me semble que l'utilisation de strstr pour la recherche d'une chaîne de caractère dans une autre pourrait t'être utile. Par exemple, si tu es certain que les chaînes de caractère à rechercher ne contiennent pas de retour à la ligne (dans la pratique, les formats des arguments en ligne de commande et les lectures claviers dans le programme sont souvent orientés lignes), tu peux lire ton fichier ligne par ligne, et utiliser strstr sur la chaîne lue. Ce serait sans doute un meilleur parti pris que de s'éparpiller dans des utilisations de strcmp pour chaque caractère, quitte à faire grimper la complexité temporelle !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Pour chaque ligne Li du fichier
        Pour chaque chaîne Ci à rechercher
            Si Ci est dans Li
                 Marquer Ci comme étant trouvée
            Fin Si
        Fin Pour
    Fin Pour
    En outre, comme cela a déjà été souligné, l'indentation anarchique gène considérablement la relecture du code. Il faut absolument penser à ce genre de détails quand on code, que ce soit pour soi ou pour les autres qui relisent.

    Bonne journée.
    Récursivité en C : épidémie ou hérésie ?

    "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/05/2009, 22h39
  2. Réponses: 31
    Dernier message: 02/11/2007, 16h18
  3. [Tableaux] tableau de chaine de caractere
    Par Tempotpo dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2006, 13h54
  4. Réponses: 6
    Dernier message: 05/04/2006, 11h12
  5. [Debutant] Mettre une chaine de caractere dans un tableau
    Par bouboussjunior dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 14/09/2004, 11h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo