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 :

problème dans les tableaux


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut problème dans les tableaux
    bonjour,
    voici mon programme:
    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
    int main(int argc, char *argv[])
    {
    int i ;
    char* tab[100];
    char chaine[100];
    printf("donner la chaine : ");
    scanf("%s",chaine);
    tab[0]=chaine;
     
    printf("\n ---- %s ",tab[0]);
     
    int l;
    l=strlen(chaine); printf("\nla longeur de la chaine est = %d \n\n",l);
    int j;
        char buffer[10] = { 0 };
     
    int k=l-1;int u=0
    printf ("     Chaine : %s\n",chaine);
     printf ("------------------------------------------------\n");
        for(j=2;j<l;j++){
         for(i=0;i<k;i++){
     
    u++;
    printf ("U : %d\n",u);
     
                strncpy (buffer,chaine+i,j);
     
            tab[u]=buffer;
            printf("\ntab[%d] est::  %s \n",u,tab[u]);
     
    }
           k--;
          printf ("------------------------------------------------\n");
    }
     
     for(i=0;i<u;i++)   printf("tableau::  %s \n", tab[i]);
    le problème ici c'est que dans la dernière boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i=0;i<u;i++)   printf("tableau::  %s \n", tab[i]);
    il n'affiche pas les différentes chaines stockées dans auparavant ,il n'affiche que la dernière chaines trouvées u fois la même chaine.
    est-ce que vous avez une idée?
    merci pour votre aide.

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Code A la ligne 17 : Sélectionner tout - Visualiser dans une fenêtre à part
    int k=l-1;int u=0
    Il manque un ;

    Es-tu certain d'exécuter ce code puisqu'il ne peut pas être compilé ?

    En analysant rapidement, tu fais :
    Donc tu demandes à tout le monde de pointer sur buffer et donc à la fin, tout le monde affiche ce que contient buffer. La seule exception est tab[0] qui pointe directement sur chaine.

    PS : le code un peu mieux indenté
    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
     
    #include <stdio.h>
    #include <string.h>
    int main(int argc, char *argv[])
    {
    	int i ;
    	char* tab[100];
    	char chaine[100];
    	printf("donner la chaine : ");
    	scanf("%s",chaine);
    	tab[0]=chaine;
     
    	printf("\n ---- %s ",tab[0]);
     
    	int l;
    	l=strlen(chaine); printf("\nla longeur de la chaine est = %d \n\n",l);
    	int j;
    	char buffer[10] = { 0 };
     
    	int k=l-1;
    	int u=0;
     
    	printf ("     Chaine : %s\n",chaine);
    	printf ("------------------------------------------------\n");
    	for(j=2;j<l;j++)
    	{
    		for(i=0;i<k;i++)
    		{
    			u++;
    			printf ("U : %d\n",u);
     
    			strncpy (buffer,chaine+i,j);
     
    			tab[u]=buffer;
    			printf("\ntab[%d] est::  %s \n",u,tab[u]);
    		}
    		k--;
    		printf ("\n");
    	}
     
    	for(i=0;i<u;i++)   printf("tableau::  %s \n", tab[i]);
    }

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut
    oui, on peut compiler le programme.mais lors de l’exécution il se bloque.
    alors est-ce que vous avez une autre idée pour stockée chaque élément dans une case du tableau.
    merci pour votre aide.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Bktero t'as déjà donné l'explication. Toutes les cases de ton tableau "tab" pointent vers le même buffer "buffer".

    Tu pourrais allouer dynamiquement un nouveau buffer (avec malloc()) pour chaque case du tableau et y copier la chaîne. Ou bien faire un tableau tab[10][100] et y copier directement les chaînes.

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut
    merci pour votre aide les amis.
    je veux juste savoir est-ce que je peut comparer les chaines entre eux à chaque fois.
    je veux comparer les chaines entre eux pour ne pas faire la redondance des chaines dans le tableau.
    Selon vous quel est la meilleur stratégie?
    merci.

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Ce n'est pas le plus efficace mais le plus simple c'est, à chaque fois que tu insère une nouvelle chaîne dans ton tableau, de vérifier toutes les chaînes précédentes pour voir si elle y figure déjà.

    Une comparaison de chaîne ça se fait avec strcmp().

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mido1951 Voir le message
    oui, on peut compiler le programme
    Euh.... Non, tu ne peux pas compiler le code ci-dessus

    Pour stocker tes chaines intermédiaires, sers toi d'une des 2 idées de matafan, celle avec des malloc étant sûrement la plus rapide à mettre en oeuvre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probléme Bizzare dans les tableaux
    Par amine008 dans le forum Développement Windows
    Réponses: 2
    Dernier message: 27/10/2010, 10h13
  2. [WD-2003] Problème de tailles fixes dans les tableaux
    Par ptitmau dans le forum VBA Word
    Réponses: 9
    Dernier message: 17/08/2010, 21h24
  3. Réponses: 0
    Dernier message: 12/02/2009, 13h07
  4. Problème de débutant dans les tableaux
    Par mat1450 dans le forum C++
    Réponses: 8
    Dernier message: 17/08/2007, 19h09
  5. Réponses: 14
    Dernier message: 01/09/2003, 22h46

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