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 :

insérer une et des chaines dans un tableau de chaines


Sujet :

C

  1. #1
    Membre du Club
    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
    Points : 65
    Points
    65
    Par défaut insérer une et des chaines dans un tableau de chaines
    Bonjour,

    Je veux découper une chaine de caractère et la stocker dans un tableau de chaine.
    voici ma chaine: ac[cg]tg[zu]op

    Je veux découper cette chaine et stocker chaque caractère dans une case d'un tableau de chaine mais la chaine entre crocher doit être dans une seule case du tableau.
    par exemple mon tableau de chaine sera de cette façon:
    tableau[0]=a
    tableau[1]=c
    tableau[2]=cg
    tableau[3]=t
    tableau[4]=g
    tableau[5]=zu
    tableau[6]=o
    tableau[7]=p.

    voici mon code mais je pense que ça marche pas.
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    void add_caractere(char* s,char c)
    {
        int t=strlen(s);
        realloc(s,t+1);
        s[t]=c;
        s[t+1]='\0';
    }
     
    int main()
    {
     
        char* motif; motif=malloc(sizeof(char*)*200);
        char* motif1; motif=malloc(sizeof(char*)*20);
       strcpy(motif,"ac[cg]tg[zu]opt");
        char* tableau[strlen(motif)];
        int i=0; int j=0; int t=0;
    printf("\n le motif est: %s",motif);
     
    for(i=0;i<strlen(motif);i++)
        {tableau[i]=NULL;}
     
        i=0;
       while(i<strlen(motif))
       {
           if(motif[i]=='[')
           {    t=i;
               while (motif[t]!=']')
               {
                    motif1= motif1 + motif[i];
                    t++;
               }
           }
           else
           {
               add_caractere(tableau[j],motif[i]);
               //tableau[j]=motif[i];
               j++;
           }
     
            i++;
       }
     
    for(i=0;i<j+1;i++)      // pour voir le resultat
        printf("tab[%d]: %s",i,tableau[i]);
        return 0;
    }
    est-ce que vous pouvez m'aider?
    Merci

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juin 2013
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 18
    Points : 35
    Points
    35
    Par défaut
    salut

    voici mon code mais je pense que ça marche pas.
    le moins qu'on puisse dire c'est que tu n'es pas très explicite ...

    il y a beaucoup d'incohérences dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* motif; motif=malloc(sizeof(char*)*200);
    tu définis motif comme un pointeur de char
    ensuite tu lui alloue un espace de mémoire de la taille de 200 pointeurs de char
    tu voulais surement que cette taille soit 200 char

    même remarque pour la ligne suivante

    tu peux créer simplement des tableaux lorsque que tu en connais la taille max au moment de l'écriture du programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char motif[200];
    char motif1[20];
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* tableau[strlen(motif)];
    tu définie tableau comme un tableau de pointeurs de char
    la longueur de ce tableau : strlen(motif) n'est connue qu'à l'exécution du programme alors qu'elle est utilisée à la compilation
    puisque que tu as fixé une longueur max à motif et motif1, tu peux reprendre ces valeurs pour fixer la taille de tableau :
    bon essaie déjà d'avoir es variables déclarées convenablement.
    pour la suite tu te mélange souvent les pinceaux entre variables, pointeurs tableaux
    il faut déjà que tu comprenne que si tu additionne les caractères 'a' et 'b' tu n'obtiendras pas las chaine de caractères "ab" mains un caractère dont le code ascii est sa somme du code ascii de 'a' et de celui de 'b'

    bon courage
    @+

  3. #3
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Citation Envoyé par mido1951 Voir le message
    Bonjour,

    Je veux découper une chaine de caractère et la stocker dans un tableau de chaine.
    voici ma chaine: ac[cg]tg[zu]op

    Je veux découper cette chaine et stocker chaque caractère dans une case d'un tableau de chaine mais la chaine entre crocher doit être dans une seule case du tableau.
    par exemple mon tableau de chaine sera de cette façon:
    tableau[0]=a
    tableau[1]=c
    tableau[2]=cg
    tableau[3]=t
    tableau[4]=g
    tableau[5]=zu
    tableau[6]=o
    tableau[7]=p.

    voici mon code mais je pense que ça marche pas.
    est-ce que vous pouvez m'aider?
    Merci
    Bonjour,
    Ton problème est simple, et comme souvent tu le compliques inutilement en codant d'abord et en réfléchissant ensuite sur ce que tu as produit.
    Tu pars d'une chaîne "ac[cg]tg[zu]op" et tu veux un tableau de chaînes {"a',"c","cg","t","g","zu","o","p"}.

    Alors on part du principe qu'une lettre est transformée en chaîne d'un caractère et que les caractères situés entre [ et ] sont une seule chaîne. On part aussi du principe que la chaîne en entrée est toujours bien formée → pas de mauvais parenthésage, pas de chaîne vide ou NULL, pas de [] imbriqués, pas de [] vides, etc …

    La fonction que tu vas devoir écrire va prendre en entrée ta chaîne à découper et renvoyer un tableau de chaînes. Le prototype sera donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char **split_string(const char *string)
    Ensuite il y a plusieurs approches. Prenons par exemple le parti de compter combien il y aura de chaînes dans le tableau final. Pour cela il nous faut une fonction int count_segments(const char *string);. Cela nous donnera plus ou moins la taille du tableau à renvoyer. Prenons aussi le parti de renvoyer un tableau dont la fin est marquée par une chaîne NULL.

    Pour la création des chaînes nous allons utiliser strndup tout simplement. La fonction commence à prendre forme :
    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
    char **split_string(const char *string)
    {
      int size=count_segments(string);
      char **result=malloc((size+1)*sizeof *result);
      int i_result=0;
     
      char *start=string;
      char *end=string+1;
      while (*start) {
        if (*start=='[') {
          while (*end!=']') ++end;
          ++start;
        }
     
        result[i_result]=strndup(start, end-start);
        ++i_result;
        start=end+1;
        end=start+1;
      }
      result[i_result]=NULL;
      return result;
    }
    Bon c'est tapé à la volée rapidement sans garantie, il reste à créer count_segments, vérifier les cas limites, etc …


    Edit:
    Citation Envoyé par tinofutinofu Voir le message
    salut

    [...]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* tableau[strlen(motif)];
    tu définie tableau comme un tableau de pointeurs de char
    la longueur de ce tableau : strlen(motif) n'est connue qu'à l'exécution du programme alors qu'elle est utilisée à la compilation
    puisque que tu as fixé une longueur max à motif et motif1, tu peux reprendre ces valeurs pour fixer la taille de tableau :
    [...]
    C11 autorise cela → VLA. Ce sont des tableaux dont la taille est déterminée au runtime, ils sont alloués sur la pile en général.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/11/2010, 23h15
  2. Réponses: 9
    Dernier message: 26/06/2007, 17h58
  3. insérer des données dans un tableau lors d'une boucle
    Par sissi25 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/05/2007, 09h19
  4. Lettres d'une chaine dans un tableau
    Par Girzi dans le forum Langage
    Réponses: 2
    Dernier message: 07/07/2006, 09h36
  5. [Tableaux] Recherche d'une chaine dans un tableau
    Par tom06440 dans le forum Langage
    Réponses: 5
    Dernier message: 20/10/2005, 23h27

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