Précédent   Forum du club des développeurs et IT Pro > C et C++ > C
C Forum d'entraide technique sur le langage C. Avant de poster -> F.A.Q. C, Avant de poster.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/12/2012, 21h10   #1
hafed22
 
Homme
Étudiant
Inscription : décembre 2012
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2012
Messages : 6
Points : -1
Points : -1
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 :
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;
}
hafed22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2012, 23h18   #2
fred1599
Membre Expert
 
Avatar de fred1599
 
Homme Fred
Enseignant
Inscription : juillet 2006
Messages : 1 315
Détails du profil
Informations personnelles :
Nom : Homme Fred
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : juillet 2006
Messages : 1 315
Points : 1 810
Points : 1 810
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)
fred1599 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 10h55   #3
diogene
Responsable Modération
 
Avatar de diogene
 
Homme Patrick Gonord
Enseignant Chercheur
Inscription : juin 2005
Messages : 5 434
Détails du profil
Informations personnelles :
Nom : Homme Patrick Gonord
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Enseignant Chercheur
Secteur : Enseignement

Informations forums :
Inscription : juin 2005
Messages : 5 434
Points : 12 948
Points : 12 948
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 !
diogene est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/12/2012, 11h12   #4
Kirilenko
Membre émérite
 
Avatar de Kirilenko
 
Homme Lucas Pesenti
Étudiant
Inscription : décembre 2011
Messages : 234
Détails du profil
Informations personnelles :
Nom : Homme Lucas Pesenti
Âge : 16
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 234
Points : 859
Points : 859
Envoyer un message via MSN à Kirilenko
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 :
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
Kirilenko est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h51.


 
 
 
 
Partenaires

Hébergement Web