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 :

matrice de chaines de caractères


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Points : 12
    Points
    12
    Par défaut matrice de chaines de caractères
    salut
    je cherche comment déclarer une matrice 2d de chaine de caractère d'une façon dynamique en c ?

  2. #2
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Citation Envoyé par info help Voir le message
    salut
    je cherche comment déclarer une matrice 2d de chaine de caractère d'une façon dynamique en c ?
    Si tu veux une matrice 2d de strings alors je pense qu'il va falloir passer par un char***.

    Si tu veux tu peux en décomposer la construction avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef char* String;  // une chaîne de caractères
    typedef String* Vecteur;  // une ligne (tableau 1d) de strings
    typedef Vecteur* Matrice; // un tableau 2d de strings
    Ensuite pour l'allocation tu vois vite que pour créer une matrice nxm tu vas devoir allouer d'abord une matrice avec n vecteurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Matrice mat=(Matrice) malloc(n*sizeof(Vecteur));
    pour chaque vecteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(i=0;i<n;i++)
      mat[i]=(Vecteur) malloc(m*sizeof(String));

    puis pour chaque string :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for(i=0;i<n;i++)
      for(j=0;j<m;j++) {
        // au choix
        mat[i][j]=NULL;
        // ou pour une taille fixée STRMAXLEN mais dans ce cas autant définir
        // string comme un char[STRMAXLEN]
        // mat[i][j]=(String)malloc(STRMAXLEN*sizof(char));
        // ou whatever
        // mat[i][j]=init_matrice(i,j);
      }
    Pour l'initialisation tu peux imbriquer les différentes boucles.

    Pour libérer la mémoire, il faut faire tout en sens inverse, d'abord libérer tous les strings (si nécessaire), puis les vecteur, puis la matrice.

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Tu ne peux pas directement déclarer une matrice de caractère en 2D de façon dynamique .

    Par contre tu peux déclarer plusieurs matrices de caractère en 1D de façon dynamique.
    Et ensuite déclarer une matrice de pointeurs en 1D de façon dynamique.
    (Chaque pointeur pointant vers une matrice de caractère)

    Ainsi tu pourras choisir via ta matrice de pointeur la matrice de caractère voulue.
    Et dans la matrice de caractère, tu pourra choisir le caractère voulu.

    Avec cette méthode, tu pourras accéder à chaque caractère comme dans un tableau 2D (tab[ligne][colonne]) par contre si tu veux faire de l'arithmétique des pointeurs, méfie toi.

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Tu devrais également jeter un petit coup d'oeil à l'exemple de la FAQ.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Melem Voir le message
    Tu devrais également jeter un petit coup d'oeil à l'exemple de la FAQ.
    merci mais la FAQ traite une matrice d'entiers, je veux traiter une matrice de chaine de caractères.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    La FAQ expose le principe d'une allocation à 2 dimensions..

    A toi de faire un (petit) effort...

    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  7. #7
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Points : 380
    Points
    380
    Par défaut
    salut !
    je cherche comment déclarer une matrice 2d de chaine de caractère
    précise si tu veux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    matrice[i][j]='a';
    ou 
    matrice[i][j]="azerty";
    A+
    Don't want money. Got money. Want admiration.
    (A tribute to SSG)

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Points : 12
    Points
    12
    Par défaut
    slaut
    merci
    je veux avoir la forme
    matrice[i][j]="azerty";

  9. #9
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Ah ben dans ce cas kwariz a parfaitement raison. J'avoue que je ne voyais pas la question dans ce sens là, même si en relisant on voit en effet que c'est cela.

  10. #10
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Points : 380
    Points
    380
    Par défaut
    dans chaque exécution de ton programme le maximum de i et j est-il connu r avant de travailler sur la matrice?
    c-à-d une fois max(i) = 3 et max(j) = 8 et une autre max(i) =3 et max(j) = 5.
    dois-tu travailler sur des matrices creuses ?

    A+
    Don't want money. Got money. Want admiration.
    (A tribute to SSG)

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Points : 12
    Points
    12
    Par défaut
    merci à tous c'est vrai anacharsis kwariz à raison

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

Discussions similaires

  1. transposé d'une matrice de chaine de caractére carré
    Par maissaab dans le forum Général Python
    Réponses: 4
    Dernier message: 04/04/2011, 13h14
  2. Matrice de chaine de caractères
    Par polopolo81 dans le forum Scilab
    Réponses: 1
    Dernier message: 30/08/2010, 18h15
  3. Réponses: 5
    Dernier message: 12/01/2009, 18h47
  4. [Débutant] Matrice de chaine de caractères
    Par anael52 dans le forum MATLAB
    Réponses: 5
    Dernier message: 02/06/2008, 09h44
  5. Réponses: 11
    Dernier message: 10/03/2008, 12h49

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